Skip to content

Build vendored artifacts #41

Build vendored artifacts

Build vendored artifacts #41

name: Build vendored artifacts
on:
workflow_dispatch:
schedule:
- cron: "23 3 * * *"
push:
branches:
- main
paths:
- ".github/workflows/code-server-artifacts.yaml"
- ".gitmodules"
- "README.md"
- "scripts/**"
- "packages/code-server/**"
- "packages/omniroute/**"
pull_request:
branches:
- main
paths:
- ".github/workflows/code-server-artifacts.yaml"
- ".gitmodules"
- "README.md"
- "scripts/**"
- "packages/code-server/**"
- "packages/omniroute/**"
permissions:
contents: read
jobs:
prepare_release:
name: prepare-release
runs-on: ubuntu-22.04
outputs:
version: ${{ steps.version.outputs.version }}
tag: ${{ steps.version.outputs.tag }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
- name: Resolve shared release version
id: version
run: node ./scripts/versioning.mjs >> "$GITHUB_OUTPUT"
create_github_release:
name: create-github-release
needs: prepare_release
runs-on: ubuntu-22.04
permissions:
contents: write
concurrency:
group: ${{ format('vendered-github-release-{0}', needs.prepare_release.outputs.tag) }}
cancel-in-progress: false
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
- name: Create or update GitHub release metadata
if: >-
${{
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
github.event_name == 'workflow_dispatch'
}}
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
node ./scripts/github-release.mjs
--create-only
--tag "${{ needs.prepare_release.outputs.tag }}"
--name "${{ needs.prepare_release.outputs.version }}"
--target-commitish "${{ github.sha }}"
build_verify_publish_code_server:
name: ${{ matrix.name }}
needs:
- prepare_release
- create_github_release
runs-on: ${{ matrix.runner }}
permissions:
contents: write
concurrency:
group: ${{ format('vendered-release-{0}-{1}', needs.prepare_release.outputs.tag, matrix.artifact_name) }}
cancel-in-progress: false
strategy:
fail-fast: false
matrix:
include:
- name: code-server Linux
runner: ubuntu-22.04
artifact_name: code-server-linux
bash_path: bash
- name: code-server macOS
runner: macos-latest
artifact_name: code-server-macos
bash_path: bash
- name: code-server Windows
runner: windows-latest
artifact_name: code-server-windows
bash_path: bash
env:
CI: true
GITHUB_TOKEN: ${{ github.token }}
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
npm_config_build_from_source: true
BASH_PATH: ${{ matrix.bash_path }}
NPM_CONFIG_SCRIPT_SHELL: ${{ matrix.bash_path }}
VERSION: ${{ needs.prepare_release.outputs.version }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version-file: packages/code-server/upstream/.node-version
cache: npm
cache-dependency-path: |
packages/code-server/upstream/package-lock.json
packages/code-server/upstream/test/package-lock.json
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.11"
- name: Install Linux prerequisites
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y jq rsync quilt libkrb5-dev
- name: Install macOS prerequisites
if: runner.os == 'macOS'
run: brew install jq rsync quilt python-setuptools
- name: Setup MSYS2
if: runner.os == 'Windows'
uses: msys2/setup-msys2@v2
with:
msystem: MSYS
path-type: inherit
update: true
install: >-
diffutils
jq
patch
quilt
rsync
unzip
zip
- name: Configure Windows shell paths
if: runner.os == 'Windows'
shell: pwsh
run: |
Add-Content -Path $env:GITHUB_ENV -Value 'NPM_CONFIG_SCRIPT_SHELL=/usr/bin/bash'
Add-Content -Path $env:GITHUB_ENV -Value ("MSYS2_CMD={0}\\setup-msys2\\msys2.cmd" -f $env:RUNNER_TEMP)
- name: Build artifacts
run: node ./packages/code-server/scripts/build-artifacts.mjs
- name: Verify built release can start
run: node ./packages/code-server/scripts/verify-startup.mjs
- name: Upload verified build to GitHub release
if: >-
${{
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
github.event_name == 'workflow_dispatch'
}}
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
node ./scripts/github-release.mjs
--artifacts-dir artifacts/code-server
--tag "${{ needs.prepare_release.outputs.tag }}"
--name "${{ needs.prepare_release.outputs.version }}"
--target-commitish "${{ github.sha }}"
--preserve-release-metadata
build_verify_publish_omniroute:
name: ${{ matrix.name }}
needs:
- prepare_release
- create_github_release
runs-on: ${{ matrix.runner }}
permissions:
contents: write
concurrency:
group: ${{ format('vendered-release-{0}-{1}', needs.prepare_release.outputs.tag, matrix.artifact_name) }}
cancel-in-progress: false
strategy:
fail-fast: false
matrix:
include:
- name: omniroute Linux x64
runner: ubuntu-22.04
artifact_name: omniroute-linux-amd64
platform: linux
arch: amd64
- name: omniroute macOS x64
runner: macos-15-intel
artifact_name: omniroute-macos-amd64
platform: macos
arch: amd64
- name: omniroute macOS arm64
runner: macos-14
artifact_name: omniroute-macos-arm64
platform: macos
arch: arm64
- name: omniroute Windows x64
runner: windows-latest
artifact_name: omniroute-windows-amd64
platform: windows
arch: amd64
env:
CI: true
VERSION: ${{ needs.prepare_release.outputs.version }}
BUILD_ARTIFACTS_PLATFORM: ${{ matrix.platform }}
ARCH: ${{ matrix.arch }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
submodules: recursive
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: 22
cache: npm
cache-dependency-path: packages/omniroute/upstream/package-lock.json
- name: Install PM2
run: npm install --global pm2
- name: Build artifacts
run: node ./packages/omniroute/scripts/build-artifacts.mjs
- name: Verify built release
env:
ARTIFACTS_DOWNLOAD_DIR: artifacts/omniroute
run: node ./packages/omniroute/scripts/verify-startup.mjs
- name: Upload verified build to GitHub release
if: >-
${{
(github.event_name == 'push' && github.ref == 'refs/heads/main') ||
github.event_name == 'workflow_dispatch'
}}
env:
GITHUB_TOKEN: ${{ github.token }}
run: >-
node ./scripts/github-release.mjs
--artifacts-dir artifacts/omniroute
--tag "${{ needs.prepare_release.outputs.tag }}"
--name "${{ needs.prepare_release.outputs.version }}"
--target-commitish "${{ github.sha }}"
--preserve-release-metadata