Anything older than Node v22 is end-of-life, and doesn't get any more support outside of commercial support. See https://endoflife.date/nodejs The current code is still compatible with Node v18.20 and up though, which switched from import assertions (`assert` keyword) to import attributes (`with` keyword). See https://nodejs.org/en/blog/release/v18.20.0 We can't go higher than v22 yet due to certain dependencies depending on obsolete behavior and `node` command line flags. For instance, the current version of `argon2-browser` (which is 4 years old) breaks on Node's native `fetch` behavior, which used to be experimental, but is now mainstream, and can no longer be disabled in Node v23 and up.
98 lines
2.5 KiB
YAML
98 lines
2.5 KiB
YAML
name: "Releases"
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
tags:
|
|
- "v*"
|
|
|
|
permissions:
|
|
id-token: write
|
|
contents: read
|
|
|
|
env:
|
|
REGISTRY: ghcr.io
|
|
REGISTRY_USER: ${{ github.actor }}
|
|
REGISTRY_PASSWORD: ${{ github.token }}
|
|
IMAGE_NAME: ${{ github.repository }}
|
|
|
|
jobs:
|
|
main:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
|
|
- name: Set node version
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 22
|
|
registry-url: "https://registry.npmjs.org"
|
|
|
|
- name: Install
|
|
run: |
|
|
export DETECT_CHROMEDRIVER_VERSION=true
|
|
npm ci
|
|
npm run setheapsize
|
|
|
|
- name: Lint
|
|
run: npx grunt lint
|
|
|
|
- name: Unit Tests
|
|
run: |
|
|
npm test
|
|
npm run testnodeconsumer
|
|
|
|
- name: Production Build
|
|
run: npx grunt prod
|
|
|
|
- name: UI Tests
|
|
run: |
|
|
sudo apt-get install xvfb
|
|
xvfb-run --server-args="-screen 0 1200x800x24" npx grunt testui
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v3
|
|
|
|
- name: Image Metadata
|
|
id: image-metadata
|
|
uses: docker/metadata-action@v4
|
|
with:
|
|
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
tags: |
|
|
type=semver,pattern={{major}}
|
|
type=semver,pattern={{major}}.{{minor}}
|
|
type=semver,pattern={{version}}
|
|
|
|
- name: Log in to GHCR
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: ${{ env.REGISTRY }}
|
|
username: ${{ env.REGISTRY_USER }}
|
|
password: ${{ env.REGISTRY_PASSWORD }}
|
|
|
|
- name: Publish to GHCR
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
push: true
|
|
tags: ${{ steps.image-metadata.outputs.tags }}
|
|
labels: ${{ steps.image-metadata.outputs.labels }}
|
|
platforms: linux/amd64,linux/arm64
|
|
|
|
- name: Upload Release Assets
|
|
id: upload-release-assets
|
|
uses: svenstaro/upload-release-action@v2
|
|
with:
|
|
repo_token: ${{ secrets.GITHUB_TOKEN }}
|
|
file: build/prod/*.zip
|
|
tag: ${{ github.ref }}
|
|
overwrite: true
|
|
file_glob: true
|
|
body: "See the [CHANGELOG](https://github.com/gchq/CyberChef/blob/master/CHANGELOG.md) and [commit messages](https://github.com/gchq/CyberChef/commits/master) for details."
|
|
|
|
- name: Publish to NPM
|
|
run: npm publish
|