Auto-update Kap #12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Auto-update Kap | |
| # Builds Kap from https://codeberg.org/loke/array via scripts/build-kap-js.sh | |
| # and opens a PR with the updated wasm/kap/* artifacts and bumped | |
| # scripts/known-versions.json. Triggered automatically by | |
| # check-language-updates.yml when a new Kap version is detected. | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| kap_version: | |
| description: 'New Kap version (e.g. 20260420-1) to record in known-versions.json' | |
| required: true | |
| type: string | |
| issue_number: | |
| description: 'Optional issue number to close from the PR (leave blank for none)' | |
| required: false | |
| default: '' | |
| type: string | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| issues: write | |
| concurrency: | |
| group: auto-update-kap | |
| cancel-in-progress: false | |
| jobs: | |
| build-and-pr: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up JDK 25 | |
| uses: actions/setup-java@v4 | |
| with: | |
| # Microsoft distribution has Java 25 GA (Temurin 25 lagged at the | |
| # time this workflow was authored). Switch to 'temurin' once it | |
| # ships 25 LTS. | |
| distribution: 'microsoft' | |
| java-version: '25' | |
| - name: Cache Gradle | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.gradle/caches | |
| ~/.gradle/wrapper | |
| key: gradle-kap-${{ runner.os }}-${{ hashFiles('scripts/build-kap-js.sh') }} | |
| restore-keys: | | |
| gradle-kap-${{ runner.os }}- | |
| - name: Build Kap JS | |
| run: bash scripts/build-kap-js.sh | |
| - name: Update known-versions.json and display strings | |
| env: | |
| KAP_VERSION: ${{ inputs.kap_version }} | |
| run: | | |
| # known-versions.json keeps the upstream form (e.g. 20260425-1). | |
| tmp=$(mktemp) | |
| jq --arg v "$KAP_VERSION" '.kap = $v' scripts/known-versions.json > "$tmp" | |
| mv "$tmp" scripts/known-versions.json | |
| echo "--- updated known-versions.json ---" | |
| cat scripts/known-versions.json | |
| # User-facing displays render YYYYMMDD-N as YYYY-MM-DD. | |
| if [[ ! "$KAP_VERSION" =~ ^([0-9]{4})([0-9]{2})([0-9]{2})- ]]; then | |
| echo "ERROR: kap_version '$KAP_VERSION' is not in YYYYMMDD-N form" >&2 | |
| exit 1 | |
| fi | |
| KAP_DISPLAY="${BASH_REMATCH[1]}-${BASH_REMATCH[2]}-${BASH_REMATCH[3]}" | |
| echo "Display version: $KAP_DISPLAY" | |
| # index.html: scoped to the data-lang="kap" dropdown item only. | |
| sed -i -E "/data-lang=\"kap\"/,/<\/div>/ s|(<span class=\"lang-version\">)[0-9]{4}-[0-9]{2}-[0-9]{2}(</span>)|\1${KAP_DISPLAY}\2|" index.html | |
| # generate-og-languages.cjs: only the Kap row. | |
| sed -i -E "s|(name: 'Kap',[[:space:]]+version: ')[0-9]{4}-[0-9]{2}-[0-9]{2}(')|\1${KAP_DISPLAY}\2|" scripts/generate-og-languages.cjs | |
| echo "--- index.html (Kap dropdown) ---" | |
| grep -A1 'data-lang="kap"' index.html | head -5 | |
| echo "--- generate-og-languages.cjs (Kap row) ---" | |
| grep "name: 'Kap'" scripts/generate-og-languages.cjs | |
| - name: Compose PR body | |
| id: body | |
| env: | |
| KAP_VERSION: ${{ inputs.kap_version }} | |
| ISSUE_NUMBER: ${{ inputs.issue_number }} | |
| run: | | |
| { | |
| echo "Auto-generated by \`.github/workflows/auto-update-kap.yml\`." | |
| echo "" | |
| echo "- Rebuilt \`wasm/kap/standalonejs.js\` and refreshed \`wasm/kap/standard-lib/*.kap\` via \`scripts/build-kap-js.sh\`." | |
| echo "- Bumped \`scripts/known-versions.json\` Kap entry to \`${KAP_VERSION}\`." | |
| echo "" | |
| echo "Source: https://codeberg.org/loke/array" | |
| if [ -n "$ISSUE_NUMBER" ]; then | |
| echo "" | |
| echo "Closes #${ISSUE_NUMBER}" | |
| fi | |
| } > pr-body.md | |
| echo "wrote pr-body.md ($(wc -c < pr-body.md) bytes)" | |
| { | |
| echo 'body<<__EOF__' | |
| cat pr-body.md | |
| echo '__EOF__' | |
| } >> "$GITHUB_OUTPUT" | |
| - name: Open pull request | |
| uses: peter-evans/create-pull-request@v7 | |
| with: | |
| token: ${{ secrets.PAT_REPO }} | |
| branch: auto/update-kap-${{ inputs.kap_version }} | |
| delete-branch: true | |
| commit-message: "Update Kap to ${{ inputs.kap_version }}" | |
| title: "Update Kap to ${{ inputs.kap_version }}" | |
| body: ${{ steps.body.outputs.body }} | |
| labels: language-update | |
| assignees: codereport | |
| add-paths: | | |
| wasm/kap/standalonejs.js | |
| wasm/kap/standard-lib | |
| scripts/known-versions.json | |
| scripts/generate-og-languages.cjs | |
| index.html |