Skip to content

Release Boffo with GitHub Actions - #11

Merged
t4k merged 10 commits into
mainfrom
claude/quirky-borg-41fccd
Nov 4, 2026
Merged

t4k merged 10 commits into
mainfrom
claude/quirky-borg-41fccd

Conversation

@t4k

@t4k t4k commented Nov 4, 2026

Copy link
Copy Markdown
Member

Replaces the Makefile release steps with GitHub Actions workflows, using the shared actions in caltechlibrary/workflows where they fit. The release instructions are in docs/releasing.md.

Workflows

Workflow Runs What it does
Docs (docs.yml) push to main and PRs touching docs/; by hand Builds with build-sphinx@v1 and checks the output with deploy-site@v1, then deploys to Pages (not on PRs). Replaces build-docs.yml, which asked for the retired ubuntu-20.04 runner and never ran.
Lint (lint.yml) PRs, push to main jshint, htmlhint, markdownlint, yamllint, and jsonlint, one job each, with pinned versions. Replaces markdown-linter.yml and yaml-linter.yml.
Release (release.yml) by hand, with a version; a dry run by default Runs .github/scripts/prepare-release.sh, which updates codemeta.json, CITATION.cff, and CHANGELOG.md. Commits chore: release X.Y.Z to main and opens a draft release with create-release@v1, whose notes are the version’s CHANGELOG.md section. A person publishes the draft, which starts IGA.
Post-release (post-release.yml) after IGA succeeds; by hand Runs .github/scripts/update-doi.sh, which waits until CaltechDATA’s latest record matches the version, records its DOI in CITATION.cff and codemeta.json, and commits that.
Apps Script (apps-script.yml) by hand, in the apps-script environment Checks out a published release, runs clasp push and create-version, and reports the Apps Script version number to set in the Marketplace SDK. That last step stays manual.

Other changes

  • Makefile: the release, post-release, sync-projects, deploy, and instructions targets are removed, and so is .clasp.json.public. Fixes to the targets that remain: clean failed on missing targets, lint searched untracked directories, and watch needs an absolute project path under clasp 3.
  • docs/installation.md: installing from source uses clasp only. The method that copied the public Apps Script project in the former maintainer’s account is gone, because nothing updates that copy and its 1.9.1 code fails on FOLIO servers that accept only short-lived tokens.
  • CHANGELOG.md: entries under [Unreleased].

Before or right after merging

  • Settings → Pages → Source: set to GitHub Actions. Until then, the Docs deploy job fails.
  • Settings → Environments: create apps-script with a required reviewer, limited to main, and add the CLASPRC_JSON secret. docs/releasing.md gives the steps and explains the token’s risks.

Testing

  • prepare-release.sh was run against the real files. It rejects a version that isn’t newer, a malformed version, a malformed date, and an empty [Unreleased] section, and the files it produces pass markdownlint, yamllint, and jsonlint.
  • update-doi.sh was run read-only against live CaltechDATA. It leaves current values alone, moves an old record ID to the latest one, and fails after retrying when the version isn’t archived yet.
  • create-release.sh was run in dry-run mode against this repository.
  • All five linters pass on the branch. actionlint and shellcheck are clean on the new files. The docs build with Sphinx 9.1.
  • Not tested: running Release, Post-release, and Apps Script on GitHub, and clasp login --auth, which needs a browser sign-in.

🤖 Generated with Claude Code

t4k and others added 10 commits November 4, 2026 08:43
build-docs.yml asked for the retired ubuntu-20.04 runner, so its runs
queued forever and the site stopped deploying. docs.yml builds with
build-sphinx and checks the result with deploy-site from
caltechlibrary/workflows, then deploys with actions/deploy-pages. Pull
requests build the site without deploying it.

The documentation dependencies are pinned in docs/requirements.txt.

Deploying needs Settings → Pages → Source set to "GitHub Actions"; the
gh-pages branch is no longer used after that.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lint.yml runs jshint, htmlhint, markdownlint, yamllint, and jsonlint on
pull requests and pushes to main, one job per linter, with pinned tool
versions and the existing configuration files. It replaces
markdown-linter.yml and yaml-linter.yml, and covers what they missed:
Code.js, the HTML files, codemeta.json, CITATION.cff, and Markdown
outside the top directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
release.yml takes a version, runs .github/scripts/prepare-release.sh,
commits the result to main as "chore: release X.Y.Z", and opens a draft
release for vX.Y.Z on that commit with the shared create-release action.
The draft's notes are the version's section of CHANGELOG.md. A dry run,
the default, shows the diff and the notes in the job summary and changes
nothing.

prepare-release.sh checks that the version is X.Y.Z, newer than
codemeta.json's, untagged, and that [Unreleased] has entries. It then
sets the version and date in codemeta.json, copies them and the other
metadata into CITATION.cff, and turns [Unreleased] in CHANGELOG.md into
the version's section with its compare link. It only edits files, so it
can be run locally to preview a release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
post-release.yml runs when the InvenioRDM GitHub Archiver workflow
succeeds, or by hand. It runs .github/scripts/update-doi.sh, which asks
CaltechDATA for the latest version of the record in codemeta.json's
relatedLink and points CITATION.cff's doi and codemeta.json's
relatedLink at it, then commits "chore: update DOI for release X.Y.Z"
to main.

The script retries until the latest record is for the version in
codemeta.json, so a slow index can't put the previous release's DOI in
CITATION.cff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
apps-script.yml is run by hand after a release is published. It checks
out the release tag, pushes to the Caltech Apps Script project with
clasp 3.4.1, creates a numbered version, and puts the number in the job
summary with a link to the Marketplace SDK's App Configuration page,
where a person sets it to ship the update.

The Apps Script API doesn't accept service accounts, so clasp uses a
person's ~/.clasprc.json from the CLASPRC_JSON secret of the apps-script
environment. The job refuses to run on a draft release.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The new "Releasing Boffo" page covers the one-time setup (the Pages
source, IGA's token, and the apps-script environment with its clasp
credentials and their risks), the steps of a release from the Release
workflow through the Marketplace SDK version number, what to do when a
step fails, and running the release scripts locally.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
GitHub Actions workflows make releases now, so release, post-release,
sync-projects, deploy, instructions, and their helpers are gone, along
with .clasp.json.public, which only sync-projects used. The Makefile
no longer needs gh.

Kept targets are fixed on the way:
- lint checks the files lint.yml checks, taken from git ls-files, so it
  no longer descends into untracked directories such as .claude/.
- watch passes clasp an absolute path to .clasp.json.caltech, which
  clasp 3 requires for a project file not named .clasp.json.
- clean no longer depends on targets that don't exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The "Copying the Google Apps Script project" method had people copy a
public Apps Script project in the former maintainer's personal Google
account. Nothing updates that copy, and its 1.9.1 code fails on FOLIO
servers that accept only short-lived access tokens.

Installing from source now means pushing the files with clasp. That
section now turns on the Apps Script API, logs in, creates .clasp.json
(the repository has none), and says how to update later. The
test-deployment steps that the clasp method also needs move into a
"Running Boffo in a spreadsheet" section, and the five screenshots used
only by the copy method are removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Caltech Library has its own Google Workspace, separate from Caltech's.
The Apps Script project, the account that runs clasp, the Workspace
policies that can end its token, and the add-on's Marketplace audience
all belong to the Library's, so the release docs, the Apps Script
workflow's header, and the install-from-source intro now say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@t4k
t4k merged commit ee8a4f4 into main Nov 4, 2026
7 checks passed
@t4k
t4k deleted the claude/quirky-borg-41fccd branch November 4, 2026 17:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant