Skip to content

Auto-update Kap

Auto-update Kap #12

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