Refactor releases to use VS Code packaging #260
Workflow file for this run
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: Draft release | ||
|
Check failure on line 1 in .github/workflows/release.yaml
|
||
| on: | ||
| workflow_dispatch: | ||
| inputs: | ||
| version: | ||
| type: string | ||
| required: true | ||
| permissions: | ||
| contents: write # For creating releases. | ||
| discussions: write # For creating a discussion. | ||
| # Cancel in-progress runs for pull requests when developers push | ||
| # additional changes | ||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | ||
| jobs: | ||
| package-linux: | ||
| name: ${{ matrix.vscode_target }} | ||
| runs-on: ubuntu-latest | ||
| container: "python:3.8-slim-buster" | ||
| strategy: | ||
| matrix: | ||
| include: | ||
| - prefix: x86_64-linux-gnu | ||
| npm_arch: x64 | ||
| apt_arch: amd64 | ||
| package_arch: amd64 | ||
| vscode_target: linux-x64 | ||
| - prefix: aarch64-linux-gnu | ||
| npm_arch: arm64 | ||
| apt_arch: arm64 | ||
| package_arch: arm64 | ||
| vscode_target: linux-arm64 | ||
| - prefix: arm-linux-gnueabihf | ||
| npm_arch: armv7l | ||
| apt_arch: armhf | ||
| package_arch: armv7l | ||
| vscode_target: linux-armhf | ||
| env: | ||
| AR: ${{ format('{0}-ar', matrix.prefix) }} | ||
| AS: ${{ format('{0}-as', matrix.prefix) }} | ||
| CC: ${{ format('{0}-gcc', matrix.prefix) }} | ||
| CPP: ${{ format('{0}-cpp', matrix.prefix) }} | ||
| CXX: ${{ format('{0}-g++', matrix.prefix) }} | ||
| FC: ${{ format('{0}-gfortran', matrix.prefix) }} | ||
| LD: ${{ format('{0}-ld', matrix.prefix) }} | ||
| STRIP: ${{ format('{0}-strip', matrix.prefix) }} | ||
| PKG_CONFIG_PATH: ${{ format('/usr/lib/{0}/pkgconfig', matrix.prefix) }} | ||
| # Set cross-compiler package arch. | ||
| APT_ARCH: ${{ matrix.apt_arch }} | ||
| # For downloading the right Node. | ||
| npm_config_arch: ${{ matrix.npm_arch }} | ||
| # Overrides package architecture. | ||
| ARCH: ${{ matrix.package_arch }} | ||
| # Not building from source results in an x86_64 argon2, as if | ||
| # npm_config_arch is being ignored. | ||
| npm_config_build_from_source: true | ||
| # Overrides VS Code gulp build target. | ||
| VSCODE_TARGET: ${{ matrix.vscode_target }} | ||
| TAG: ${{ inputs.version || github.ref_name }} | ||
| steps: | ||
| - name: Install cross-compiler and system dependencies | ||
| run: | | ||
| sed -i 's/deb\.debian\.org/archive.debian.org/g' /etc/apt/sources.list | ||
| dpkg --add-architecture $APT_ARCH | ||
| apt update && apt install -y --no-install-recommends \ | ||
| crossbuild-essential-$APT_ARCH \ | ||
| libx11-dev:$APT_ARCH \ | ||
| libx11-xcb-dev:$APT_ARCH \ | ||
| libxkbfile-dev:$APT_ARCH \ | ||
| libsecret-1-dev:$APT_ARCH \ | ||
| libkrb5-dev:$APT_ARCH \ | ||
| ca-certificates \ | ||
| curl wget rsync gettext-base | ||
| - name: Install nfpm | ||
| run: | | ||
| mkdir -p ~/.local/bin | ||
| curl -sSfL https://github.com/goreleaser/nfpm/releases/download/v2.3.1/nfpm_2.3.1_`uname -s`_`uname -m`.tar.gz | tar -C ~/.local/bin -zxv nfpm | ||
| echo "$HOME/.local/bin" >> $GITHUB_PATH | ||
| - run: sudo apt update && sudo apt install -y libkrb5-dev | ||
| - uses: awalsh128/cache-apt-pkgs-action@2c09a5e66da6c8016428a2172bd76e5e4f14bb17 # latest | ||
| with: | ||
| packages: quilt | ||
| version: 1.0 | ||
| - name: Set version to tag without leading v | ||
| run: | | ||
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | ||
| - uses: actions/checkout@v6 | ||
| with: | ||
| submodules: true | ||
| - run: quilt push -a | ||
| - uses: actions/setup-node@v6 | ||
| with: | ||
| node-version-file: .node-version | ||
| cache: npm | ||
| cache-dependency-path: | | ||
| package-lock.json | ||
| test/package-lock.json | ||
| - run: npm ci | ||
| - run: npm run build | ||
| - run: npm run build:vscode | ||
| # Platform-agnostic NPM package. | ||
| - run: npm run release | ||
| if: ${{ matrix.vscode_target == linux-x64 }} | ||
| - run: tar -czf package.tar.gz release | ||
| if: ${{ matrix.vscode_target == linux-x64 }} | ||
| - uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1 | ||
| if: ${{ matrix.vscode_target == linux-x64 }} | ||
| with: | ||
| draft: true | ||
| discussion_category_name: "📣 Announcements" | ||
| files: package.tar.gz | ||
| # Platform-specific release. | ||
| - run: KEEP_MODULES=1 npm run release | ||
| - name: Replace node with cross-compile equivalent | ||
| run: | | ||
| node_version=$(node --version) | ||
| wget https://nodejs.org/dist/${node_version}/node-${node_version}-linux-${npm_config_arch}.tar.xz | ||
| tar -xf node-${node_version}-linux-${npm_config_arch}.tar.xz node-${node_version}-linux-${npm_config_arch}/bin/node --strip-components=2 | ||
| mv ./node ./release/lib/node | ||
| - run: npm run package | ||
| - uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1 | ||
| with: | ||
| draft: true | ||
| discussion_category_name: "📣 Announcements" | ||
| files: ./release-packages/* | ||
| package-macos: | ||
| name: ${{ matrix.vscode_target }} | ||
| runs-on: ${{ matrix.os }} | ||
| strategy: | ||
| matrix: | ||
| include: | ||
| - os: macos-15-intel | ||
| vscode_target: darwin-x64 | ||
| - os: macos-latest | ||
| vscode_target: darwin-arm64 | ||
| env: | ||
| VSCODE_TARGET: ${{ matrix.vscode_target }} | ||
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| TAG: ${{ inputs.version || github.ref_name }} | ||
| steps: | ||
| # The version of node-gyp we use depends on distutils but it was removed | ||
| # in Python 3.12. It seems to be fixed in the latest node-gyp so when we | ||
| # next update Node we can probably remove this. For now, install | ||
| # setuptools since it contains distutils. | ||
| - run: brew install python-setuptools quilt | ||
| - name: Install nfpm | ||
| run: | | ||
| mkdir -p ~/.local/bin | ||
| curl -sSfL https://github.com/goreleaser/nfpm/releases/download/v2.3.1/nfpm_2.3.1_`uname -s`_`uname -m`.tar.gz | tar -C ~/.local/bin -zxv nfpm | ||
| echo "$HOME/.local/bin" >> $GITHUB_PATH | ||
| - name: Set version to tag without leading v | ||
| run: | | ||
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | ||
| - uses: actions/checkout@v6 | ||
| with: | ||
| submodules: true | ||
| - run: quilt push -a | ||
| - uses: actions/setup-node@v6 | ||
| with: | ||
| node-version-file: .node-version | ||
| cache: npm | ||
| cache-dependency-path: | | ||
| package-lock.json | ||
| test/package-lock.json | ||
| - run: npm ci | ||
| - run: npm run build | ||
| - run: npm run build:vscode | ||
| - run: KEEP_MODULES=1 npm run release | ||
| - run: npm run test:native | ||
| - run: npm run package | ||
| - uses: softprops/action-gh-release@de2c0eb89ae2a093876385947365aca7b0e5f844 # v1 | ||
| with: | ||
| draft: true | ||
| discussion_category_name: "📣 Announcements" | ||
| files: ./release-packages/* | ||