Draft release #26
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 | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: The version to publish (include "v", i.e. "v4.9.1"). | |
| type: string | |
| required: true | |
| environment: | |
| description: The environment to release to (staging or production). | |
| type: choice | |
| options: | |
| - staging | |
| - production | |
| required: true | |
| default: 'staging' | |
| 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-cross: | |
| name: ${{ matrix.prefix }} | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| needs: npm-version | |
| container: "python:3.8-slim-buster" | |
| strategy: | |
| matrix: | |
| include: | |
| - prefix: x86_64-linux-gnu | |
| npm_arch: x64 | |
| apt_arch: amd64 | |
| package_arch: amd64 | |
| - prefix: aarch64-linux-gnu | |
| npm_arch: arm64 | |
| apt_arch: arm64 | |
| package_arch: arm64 | |
| - prefix: arm-linux-gnueabihf | |
| npm_arch: armv7l | |
| apt_arch: armhf | |
| package_arch: armv7l | |
| 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) }} | |
| TARGET_ARCH: ${{ matrix.apt_arch }} | |
| npm_config_arch: ${{ matrix.npm_arch }} | |
| PKG_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 | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| cache-dependency-path: | | |
| package-lock.json | |
| test/package-lock.json | |
| - name: Install cross-compiler and system dependencies | |
| run: | | |
| set -e | |
| # Ensure TARGET_ARCH is set | |
| : "${TARGET_ARCH:?Environment variable TARGET_ARCH must be set}" | |
| # Update sources to use archive.debian.org | |
| sed -i 's|http://deb\.debian\.org|http://archive.debian.org|g' /etc/apt/sources.list | |
| sed -i 's|http://security\.debian\.org|http://archive.debian.org|g' /etc/apt/sources.list | |
| # Disable "valid-until" check for expired Release files | |
| echo 'Acquire::Check-Valid-Until "false";' > /etc/apt/apt.conf.d/99no-check-valid-until | |
| # Add cross-compilation architecture | |
| dpkg --add-architecture "$TARGET_ARCH" | |
| # Update and install packages | |
| apt-get update | |
| apt-get install -y --no-install-recommends \ | |
| crossbuild-essential-"$TARGET_ARCH" \ | |
| libx11-dev:"$TARGET_ARCH" \ | |
| libx11-xcb-dev:"$TARGET_ARCH" \ | |
| libxkbfile-dev:"$TARGET_ARCH" \ | |
| libsecret-1-dev:"$TARGET_ARCH" \ | |
| libkrb5-dev:"$TARGET_ARCH" \ | |
| ca-certificates \ | |
| curl \ | |
| wget \ | |
| rsync \ | |
| gettext-base | |
| - run: SKIP_SUBMODULE_DEPS=1 npm ci | |
| - 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: Download npm package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: npm-release-package | |
| - run: tar -xzf package.tar.gz | |
| - run: npm run release:standalone | |
| - 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-standalone/lib/node | |
| # Strip out the v (v4.9.1 -> 4.9.1). | |
| - name: Get and set VERSION | |
| run: | | |
| TAG="${{ inputs.version || github.ref_name }}" | |
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | |
| - env: | |
| VERSION: ${{ env.VERSION }} | |
| run: npm run package $PKG_ARCH | |
| - uses: softprops/action-gh-release@v1 | |
| with: | |
| draft: true | |
| prerelease: ${{ github.event.inputs.environment == 'staging' }} | |
| discussion_category_name: "📣 Announcements" | |
| files: ./release-packages/* | |
| - name: Authenticate to Google Cloud | |
| uses: google-github-actions/auth@v2 | |
| with: | |
| credentials_json: ${{ secrets.GCP_UPLOAD_CREDENTIALS }} | |
| - name: Upload .deb files to GCP bucket | |
| uses: google-github-actions/upload-cloud-storage@v2 | |
| with: | |
| path: ./release-packages/ | |
| destination: qbraid-code-server/${{ github.event.inputs.environment }} | |
| glob: '*.deb' | |
| package-macos-amd64: | |
| name: x86-64 macOS build | |
| runs-on: macos-13 | |
| timeout-minutes: 15 | |
| needs: npm-version | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| cache-dependency-path: | | |
| package-lock.json | |
| test/package-lock.json | |
| - run: SKIP_SUBMODULE_DEPS=1 npm ci | |
| - 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 | |
| # 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 | |
| - name: Download npm package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: npm-release-package | |
| - run: tar -xzf package.tar.gz | |
| - run: npm run release:standalone | |
| - run: npm run test:native | |
| # Strip out the v (v4.9.1 -> 4.9.1). | |
| - name: Get and set VERSION | |
| run: | | |
| TAG="${{ inputs.version || github.ref_name }}" | |
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | |
| - name: Build packages with nfpm | |
| env: | |
| VERSION: ${{ env.VERSION }} | |
| run: npm run package | |
| - uses: softprops/action-gh-release@v1 | |
| with: | |
| draft: true | |
| prerelease: ${{ github.event.inputs.environment == 'staging' }} | |
| discussion_category_name: "📣 Announcements" | |
| files: ./release-packages/* | |
| package-macos-arm64: | |
| name: arm64 macOS build | |
| runs-on: macos-latest | |
| timeout-minutes: 15 | |
| needs: npm-version | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| steps: | |
| - name: Checkout repo | |
| uses: actions/checkout@v4 | |
| - name: Install Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: .node-version | |
| cache: npm | |
| cache-dependency-path: | | |
| package-lock.json | |
| test/package-lock.json | |
| - run: SKIP_SUBMODULE_DEPS=1 npm ci | |
| - 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 | |
| # 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 | |
| - name: Download npm package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: npm-release-package | |
| - run: tar -xzf package.tar.gz | |
| - run: npm run release:standalone | |
| - run: npm run test:native | |
| # Strip out the v (v4.9.1 -> 4.9.1). | |
| - name: Get and set VERSION | |
| run: | | |
| TAG="${{ inputs.version || github.ref_name }}" | |
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | |
| - name: Build packages with nfpm | |
| env: | |
| VERSION: ${{ env.VERSION }} | |
| run: npm run package | |
| - uses: softprops/action-gh-release@v1 | |
| with: | |
| draft: true | |
| prerelease: ${{ github.event.inputs.environment == 'staging' }} | |
| discussion_category_name: "📣 Announcements" | |
| files: ./release-packages/* | |
| npm-package: | |
| name: Upload npm package | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| needs: npm-version | |
| steps: | |
| - name: Download npm package | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: npm-release-package | |
| - uses: softprops/action-gh-release@v1 | |
| with: | |
| draft: true | |
| prerelease: ${{ github.event.inputs.environment == 'staging' }} | |
| discussion_category_name: "📣 Announcements" | |
| files: ./package.tar.gz | |
| npm-version: | |
| name: Modify package.json version | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - name: Download artifacts | |
| uses: dawidd6/action-download-artifact@v9 | |
| id: download | |
| with: | |
| branch: ${{ github.ref }} | |
| workflow: build.yaml | |
| workflow_conclusion: completed | |
| name: npm-package | |
| check_artifacts: false | |
| if_no_artifact_found: fail | |
| - run: tar -xzf package.tar.gz | |
| # Strip out the v (v4.9.1 -> 4.9.1). | |
| - name: Get and set VERSION | |
| run: | | |
| TAG="${{ inputs.version || github.ref_name }}" | |
| echo "VERSION=${TAG#v}" >> $GITHUB_ENV | |
| - name: Modify version | |
| env: | |
| VERSION: ${{ env.VERSION }} | |
| run: | | |
| echo "Updating version in root package.json" | |
| npm version --prefix release "$VERSION" | |
| echo "Updating version in lib/vscode/product.json" | |
| tmp=$(mktemp) | |
| jq ".codeServerVersion = \"$VERSION\"" release/lib/vscode/product.json > "$tmp" && mv "$tmp" release/lib/vscode/product.json | |
| # Ensure it has the same permissions as before | |
| chmod 644 release/lib/vscode/product.json | |
| - run: tar -czf package.tar.gz release | |
| - name: Upload npm package artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: npm-release-package | |
| path: ./package.tar.gz |