Skip to content

GemStone Search: retire the standalone Find Class picker and add an exact match mode #333

GemStone Search: retire the standalone Find Class picker and add an exact match mode

GemStone Search: retire the standalone Find Class picker and add an exact match mode #333

Workflow file for this run

name: Roadmap
# Regenerates ROADMAP.md from the `roadmap`-labeled tracker issues (see
# scripts/generate-roadmap.mjs) whenever a tracker changes, and pushes the
# result straight to main. That push to main by the actions bot is
# intentional: ROADMAP.md is a generated artifact of the tracker issues, so
# committing it directly (rather than via a PR) is what keeps it from
# drifting. There is no push-triggered loop risk: `issues:` events are not
# fired by commits, and this workflow has no `push:` trigger (the
# paths-ignore equivalent of excluding ROADMAP.md is therefore moot).
on:
issues:
types:
- opened
- edited
- labeled
- unlabeled
- milestoned
- demilestoned
- closed
- reopened
workflow_dispatch:
# zizmor(excessive-permissions): an explicit permissions block is required
# instead of relying on the default GITHUB_TOKEN scope. `contents: write`
# is needed to push the regenerated ROADMAP.md to main.
permissions:
contents: write
# Rapid label/milestone churn queues one pending regeneration instead of
# racing pushes: in-flight runs are cancelled in favor of the newest event,
# which regenerates from the latest issue state anyway.
concurrency:
group: roadmap-regen
cancel-in-progress: true
jobs:
regenerate:
name: Regenerate ROADMAP.md
timeout-minutes: 5
# Only proceed when the triggering issue has (or, for `unlabeled`, had)
# the `roadmap` label — other issue traffic is irrelevant to the roadmap.
# Filtered in-job because `on.issues` has no label filter.
if: >-
github.event_name == 'workflow_dispatch' ||
contains(github.event.issue.labels.*.name, 'roadmap') ||
github.event.label.name == 'roadmap'
runs-on: ubuntu-latest
steps:
# zizmor(unpinned-uses): actions must be pinned to a commit SHA, not
# a mutable tag like @v7. Credentials are persisted deliberately —
# this job's whole purpose is to push the regenerated file to main.
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.0 # zizmor: ignore[artipacked] -- the push step below needs the token
with:
ref: main
persist-credentials: true
- name: Setup Node.js
# zizmor(unpinned-uses): actions must be pinned to a commit SHA,
# not a mutable tag like @v6
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version-file: '.nvmrc'
# No `npm ci`: the generator uses only Node built-ins (global fetch).
- name: Regenerate ROADMAP.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: node scripts/generate-roadmap.mjs
- name: Commit and push if changed
run: |
if git diff --quiet -- ROADMAP.md; then
echo "ROADMAP.md unchanged; nothing to push."
exit 0
fi
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add ROADMAP.md
git commit -m "Regenerate ROADMAP.md from tracker issues"
# A run may still race a human push to main; rebase-and-retry
# rather than failing on a non-fast-forward.
for attempt in 1 2 3; do
if git push origin main; then
exit 0
fi
echo "Push attempt $attempt failed; rebasing onto latest main..."
git pull --rebase origin main
done
git push origin main