mirror of https://github.com/coder/code-server.git
312 lines
9.8 KiB
YAML
312 lines
9.8 KiB
YAML
name: Draft release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version:
|
|
description: The version to publish (include "v", i.e. "v4.9.1").
|
|
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:
|
|
# TODO: cache building yarn --production
|
|
# possibly 2m30s of savings(?)
|
|
# this requires refactoring our release scripts
|
|
package-linux-amd64:
|
|
name: x86-64 Linux build
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
needs: npm-version
|
|
container: "centos:8"
|
|
env:
|
|
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Node.js v18
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: "18"
|
|
|
|
- name: Install development tools
|
|
run: |
|
|
cd /etc/yum.repos.d/
|
|
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
|
|
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
|
|
yum install -y gcc-c++ make jq rsync python3 libsecret-devel krb5-devel
|
|
|
|
- name: Install nfpm and envsubst
|
|
run: |
|
|
mkdir -p ~/.local/bin
|
|
curl -sSfL https://github.com/goreleaser/nfpm/releases/download/v2.22.2/nfpm_2.22.2_`uname -s`_`uname -m`.tar.gz | tar -C ~/.local/bin -zxv nfpm
|
|
curl -sSfL https://github.com/a8m/envsubst/releases/download/v1.1.0/envsubst-`uname -s`-`uname -m` -o envsubst
|
|
chmod +x envsubst
|
|
mv envsubst ~/.local/bin
|
|
echo "$HOME/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: Install yarn
|
|
run: npm install -g yarn
|
|
|
|
- name: Download npm package
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: npm-release-package
|
|
|
|
- name: Decompress npm package
|
|
run: tar -xzf package.tar.gz
|
|
|
|
- name: Build standalone release
|
|
run: npm run release:standalone
|
|
|
|
- name: Install test dependencies
|
|
run: SKIP_SUBMODULE_DEPS=1 yarn --frozen-lockfile
|
|
|
|
- name: Run integration tests on standalone release
|
|
run: yarn test:integration
|
|
|
|
- name: Upload coverage report to Codecov
|
|
uses: codecov/codecov-action@v3
|
|
with:
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
if: success()
|
|
|
|
# NOTE@jsjoeio - we do this so we can strip out the v
|
|
# i.e. 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: yarn package
|
|
|
|
- uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
discussion_category_name: "📣 Announcements"
|
|
files: ./release-packages/*
|
|
|
|
# TODO: We should use the same CentOS image to cross-compile if possible?
|
|
package-linux-cross:
|
|
name: Linux cross-compile builds
|
|
runs-on: ubuntu-20.04
|
|
timeout-minutes: 15
|
|
needs: npm-version
|
|
strategy:
|
|
matrix:
|
|
include:
|
|
- prefix: aarch64-linux-gnu
|
|
arch: arm64
|
|
- prefix: arm-linux-gnueabihf
|
|
arch: armv7l
|
|
|
|
env:
|
|
AR: ${{ format('{0}-ar', matrix.prefix) }}
|
|
CC: ${{ format('{0}-gcc', matrix.prefix) }}
|
|
CXX: ${{ format('{0}-g++', matrix.prefix) }}
|
|
LINK: ${{ format('{0}-g++', matrix.prefix) }}
|
|
npm_config_arch: ${{ matrix.arch }}
|
|
NODE_VERSION: v18.15.0
|
|
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Node.js v18
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: "18.15.0"
|
|
|
|
- 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: Install cross-compiler and system dependencies (arm64)
|
|
if: ${{ matrix.arch != 'armv7l' }}
|
|
run: sudo apt update && sudo apt install -y $PACKAGE libkrb5-dev
|
|
env:
|
|
PACKAGE: ${{ format('g++-{0}', matrix.prefix) }}
|
|
|
|
- name: Install cross-compiler and system dependencies (armv7l)
|
|
if: ${{ matrix.arch == 'armv7l' }}
|
|
run: |
|
|
sudo sed -i "s/^deb/deb [arch=amd64,i386]/g" /etc/apt/sources.list
|
|
echo "deb [arch=arm64,armhf] http://ports.ubuntu.com/ $(lsb_release -s -c) main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list
|
|
echo "deb [arch=arm64,armhf] http://ports.ubuntu.com/ $(lsb_release -s -c)-updates main universe multiverse restricted" | sudo tee -a /etc/apt/sources.list
|
|
sudo dpkg --add-architecture armhf
|
|
sudo apt update
|
|
sudo apt install -y $PACKAGE libkrb5-dev:armhf
|
|
env:
|
|
PACKAGE: ${{ format('g++-{0}', matrix.prefix) }}
|
|
|
|
- name: Download npm package
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: npm-release-package
|
|
|
|
- name: Decompress npm package
|
|
run: tar -xzf package.tar.gz
|
|
|
|
- name: Build standalone release
|
|
run: npm run release:standalone
|
|
|
|
- name: Replace node with cross-compile equivalent
|
|
run: |
|
|
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
|
|
|
|
# NOTE@jsjoeio - we do this so we can strip out the v
|
|
# i.e. 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: yarn package ${npm_config_arch}
|
|
|
|
- uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
discussion_category_name: "📣 Announcements"
|
|
files: ./release-packages/*
|
|
|
|
package-macos-amd64:
|
|
name: x86-64 macOS build
|
|
runs-on: macos-latest
|
|
timeout-minutes: 15
|
|
needs: npm-version
|
|
steps:
|
|
- name: Checkout repo
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Node.js v18
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: "18"
|
|
|
|
- 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@v3
|
|
with:
|
|
name: npm-release-package
|
|
|
|
- name: Decompress npm package
|
|
run: tar -xzf package.tar.gz
|
|
|
|
- name: Build standalone release
|
|
run: npm run release:standalone
|
|
|
|
- name: Install test dependencies
|
|
run: SKIP_SUBMODULE_DEPS=1 yarn install
|
|
|
|
- name: Run native module tests on standalone release
|
|
run: yarn test:native
|
|
|
|
# NOTE@jsjoeio - we do this so we can strip out the v
|
|
# i.e. 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: yarn package
|
|
|
|
- uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
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@v3
|
|
with:
|
|
name: npm-release-package
|
|
|
|
- uses: softprops/action-gh-release@v1
|
|
with:
|
|
draft: true
|
|
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@v2
|
|
id: download
|
|
with:
|
|
branch: ${{ github.ref }}
|
|
workflow: build.yaml
|
|
workflow_conclusion: completed
|
|
name: npm-package
|
|
check_artifacts: false
|
|
if_no_artifact_found: fail
|
|
|
|
- name: Decompress npm package
|
|
run: tar -xzf package.tar.gz
|
|
|
|
# NOTE@jsjoeio - we do this so we can strip out the v
|
|
# i.e. 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
|
|
|
|
- name: Compress release package
|
|
run: tar -czf package.tar.gz release
|
|
|
|
- name: Upload npm package artifact
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: npm-release-package
|
|
path: ./package.tar.gz
|