name: Draft release 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/*