mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2026-10-23 02:02:16 +00:00
111 lines
3.8 KiB
YAML
111 lines
3.8 KiB
YAML
# Publishes the 8bws command line to npm. Push a tag cli-v<version> (the
|
|
# extension/package.json version, which the npm package shares) to run it:
|
|
#
|
|
# 1. build the packs and stage the npm package
|
|
# 2. upload the packs and assets.json to the GitHub Release for the tag
|
|
# 3. install the packed tarball in an empty dir and build from the Release
|
|
# 4. npm publish --provenance
|
|
#
|
|
# Upload comes before publish, or a published version would point at 404s.
|
|
# The packs are built once per tag (their hashes change with every build).
|
|
# TODO: pin softprops/action-gh-release and download-artifact to commit SHAs
|
|
# like node.js.yml does.
|
|
# Needs the `npm` environment with secret NPM_TOKEN, and its required reviewers.
|
|
name: Release 8bws CLI
|
|
|
|
on:
|
|
push:
|
|
tags: ['cli-v*']
|
|
|
|
jobs:
|
|
package:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
outputs:
|
|
version: ${{ steps.version.outputs.version }}
|
|
steps:
|
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
|
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 24.x
|
|
cache: 'npm'
|
|
- name: Check the tag matches package.json
|
|
id: version
|
|
run: |
|
|
version=$(node -p 'require("./extension/package.json").version')
|
|
if [ "refs/tags/cli-v$version" != "$GITHUB_REF" ]; then
|
|
echo "tag $GITHUB_REF does not match extension/package.json version $version" >&2
|
|
exit 1
|
|
fi
|
|
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
- run: git submodule init
|
|
- run: git submodule update
|
|
- run: npm ci --no-audit --legacy-peer-deps
|
|
- run: npm run build --if-present
|
|
- run: npm ci --no-audit --legacy-peer-deps --prefix extension
|
|
- run: npm run typecheck --prefix extension
|
|
- run: npm test --prefix extension
|
|
# quality 9 packs; 'npm-package' also builds out/8bws.js and out/assets.json
|
|
- run: npm run npm-package --prefix extension
|
|
- name: Pack the tarball
|
|
run: npm pack --pack-destination "$RUNNER_TEMP/npm" ./extension/out/npm
|
|
- name: Upload packs to the GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: |
|
|
extension/out/assets/*.tar.br
|
|
extension/out/assets.json
|
|
extension/THIRD-PARTY-NOTICES.md
|
|
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
with:
|
|
name: npm-package
|
|
path: ${{ runner.temp }}/npm/*.tgz
|
|
if-no-files-found: error
|
|
|
|
# Install the tarball as a user would, with only the Release to fetch packs from.
|
|
smoke-test:
|
|
needs: package
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 20.x
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: npm-package
|
|
path: pkg
|
|
- name: Build and run from the Release
|
|
run: |
|
|
mkdir smoke && cd smoke
|
|
npm init -y >/dev/null
|
|
npm install ../pkg/*.tgz
|
|
cat > hello.c <<'EOC'
|
|
#include <stdint.h>
|
|
void main(void) { while (1) ; }
|
|
EOC
|
|
npx @8bws/8bws build --check -p nes hello.c
|
|
npx @8bws/8bws run -p nes hello.c --frames 20
|
|
env:
|
|
XDG_CACHE_HOME: ${{ runner.temp }}/cache
|
|
|
|
publish:
|
|
needs: [package, smoke-test]
|
|
runs-on: ubuntu-latest
|
|
environment: npm
|
|
permissions:
|
|
contents: read
|
|
id-token: write # provenance
|
|
steps:
|
|
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
|
|
with:
|
|
node-version: 24.x
|
|
registry-url: https://registry.npmjs.org
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
name: npm-package
|
|
path: pkg
|
|
- run: npm publish pkg/*.tgz --access public --provenance
|
|
env:
|
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|