|
| 1 | +name: Auto-update J |
| 2 | + |
| 3 | +# Builds J WASM from https://github.com/jsoftware/jsource via |
| 4 | +# scripts/build-j-wasm.sh (Docker + Emscripten) and opens a PR with the |
| 5 | +# updated wasm/j/* artifacts and bumped scripts/known-versions.json. |
| 6 | +# Triggered automatically by check-language-updates.yml when version.txt |
| 7 | +# on master reports a new jversion. |
| 8 | + |
| 9 | +on: |
| 10 | + workflow_dispatch: |
| 11 | + inputs: |
| 12 | + j_version: |
| 13 | + description: 'New J version (e.g. 9.8.0-beta1) to record in known-versions.json' |
| 14 | + required: true |
| 15 | + type: string |
| 16 | + issue_number: |
| 17 | + description: 'Optional issue number to close from the PR (leave blank for none)' |
| 18 | + required: false |
| 19 | + default: '' |
| 20 | + type: string |
| 21 | + |
| 22 | +permissions: |
| 23 | + contents: write |
| 24 | + pull-requests: write |
| 25 | + issues: write |
| 26 | + |
| 27 | +concurrency: |
| 28 | + group: auto-update-j |
| 29 | + cancel-in-progress: false |
| 30 | + |
| 31 | +jobs: |
| 32 | + build-and-pr: |
| 33 | + runs-on: ubuntu-latest |
| 34 | + timeout-minutes: 90 # Docker pull + GMP + libj.a + emj link is heavy |
| 35 | + steps: |
| 36 | + - uses: actions/checkout@v4 |
| 37 | + |
| 38 | + # Docker is preinstalled on ubuntu-latest; nothing to set up. |
| 39 | + - name: Show Docker info |
| 40 | + run: docker --version |
| 41 | + |
| 42 | + - name: Build J WASM |
| 43 | + run: bash scripts/build-j-wasm.sh |
| 44 | + |
| 45 | + - name: Update known-versions.json and display strings |
| 46 | + env: |
| 47 | + J_VERSION: ${{ inputs.j_version }} |
| 48 | + run: | |
| 49 | + # known-versions.json stores the raw jversion string (e.g. 9.8.0-beta1). |
| 50 | + tmp=$(mktemp) |
| 51 | + jq --arg v "$J_VERSION" '.j = $v' scripts/known-versions.json > "$tmp" |
| 52 | + mv "$tmp" scripts/known-versions.json |
| 53 | + echo "--- updated known-versions.json ---" |
| 54 | + cat scripts/known-versions.json |
| 55 | +
|
| 56 | + # User-facing displays render with a J prefix (e.g. J9.8.0-beta1). |
| 57 | + # Replace from the J prefix up to the closing tag/quote, so we don't |
| 58 | + # have to know the previous version's exact format. |
| 59 | + J_DISPLAY="J${J_VERSION}" |
| 60 | + echo "Display version: $J_DISPLAY" |
| 61 | +
|
| 62 | + # index.html: scoped to the data-lang="j" dropdown item only. |
| 63 | + sed -i -E "/data-lang=\"j\"/,/<\/div>/ s|(<span class=\"lang-version\">)J[^<]*(</span>)|\1${J_DISPLAY}\2|" index.html |
| 64 | +
|
| 65 | + # generate-og-languages.cjs: only the J row. |
| 66 | + sed -i -E "s|(name: 'J',[[:space:]]+version: ')J[^']*(')|\1${J_DISPLAY}\2|" scripts/generate-og-languages.cjs |
| 67 | +
|
| 68 | + echo "--- index.html (J dropdown) ---" |
| 69 | + grep -A3 'data-lang="j"' index.html | head -5 |
| 70 | + echo "--- generate-og-languages.cjs (J row) ---" |
| 71 | + grep "name: 'J'" scripts/generate-og-languages.cjs |
| 72 | +
|
| 73 | + - name: Compose PR body |
| 74 | + id: body |
| 75 | + env: |
| 76 | + J_VERSION: ${{ inputs.j_version }} |
| 77 | + ISSUE_NUMBER: ${{ inputs.issue_number }} |
| 78 | + run: | |
| 79 | + { |
| 80 | + echo "Auto-generated by \`.github/workflows/auto-update-j.yml\`." |
| 81 | + echo "" |
| 82 | + echo "- Rebuilt \`wasm/j/emj.js\`, \`wasm/j/emj.wasm\`, and \`wasm/j/emj.data\` via \`scripts/build-j-wasm.sh\` (Docker + Emscripten)." |
| 83 | + echo "- Bumped \`scripts/known-versions.json\` J entry to \`${J_VERSION}\`." |
| 84 | + echo "- Synced display strings in \`index.html\` and \`scripts/generate-og-languages.cjs\` to \`J${J_VERSION}\`." |
| 85 | + echo "" |
| 86 | + echo "Source: https://github.com/jsoftware/jsource (master)" |
| 87 | + if [ -n "$ISSUE_NUMBER" ]; then |
| 88 | + echo "" |
| 89 | + echo "Closes #${ISSUE_NUMBER}" |
| 90 | + fi |
| 91 | + } > pr-body.md |
| 92 | + echo "wrote pr-body.md ($(wc -c < pr-body.md) bytes)" |
| 93 | + { |
| 94 | + echo 'body<<__EOF__' |
| 95 | + cat pr-body.md |
| 96 | + echo '__EOF__' |
| 97 | + } >> "$GITHUB_OUTPUT" |
| 98 | +
|
| 99 | + - name: Open pull request |
| 100 | + uses: peter-evans/create-pull-request@v7 |
| 101 | + with: |
| 102 | + branch: auto/update-j-${{ inputs.j_version }} |
| 103 | + delete-branch: true |
| 104 | + commit-message: "Update J to ${{ inputs.j_version }}" |
| 105 | + title: "Update J to ${{ inputs.j_version }}" |
| 106 | + body: ${{ steps.body.outputs.body }} |
| 107 | + labels: language-update |
| 108 | + assignees: codereport |
| 109 | + add-paths: | |
| 110 | + wasm/j |
| 111 | + scripts/known-versions.json |
| 112 | + scripts/generate-og-languages.cjs |
| 113 | + index.html |
0 commit comments