This repository has been archived by the owner on Oct 9, 2024. It is now read-only.
Build updates (#622) #757
This file contains 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
# alternative KISS pipeline to bloated ci.yml, modeled after vscode-ansible one. | |
name: task | |
# Controls when the action will run. Triggers the workflow on push or pull request | |
# events but only for the main branch | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} | |
cancel-in-progress: true | |
env: | |
FORCE_COLOR: "1" # make mocha output colorful | |
# https://docs.github.com/en/actions/learn-github-actions/environment-variables | |
# https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/ | |
WSLENV: CI:FORCE_COLOR:GITHUB_ACTION:GITHUB_ACTION_PATH/p:GITHUB_ACTION_REPOSITORY:GITHUB_WORKFLOW:GITHUB_WORKSPACE/p:GITHUB_PATH/p | |
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | |
jobs: | |
test: | |
env: | |
# to expose matrix job name to steps, which is not possible with expansions | |
JOB_NAME: ${{ matrix.name || matrix.task-name }} | |
SKIP_PODMAN: ${{ matrix.skip_podman || '0' }} | |
SKIP_DOCKER: ${{ matrix.skip_docker || '0' }} | |
name: ${{ matrix.name || matrix.task-name }} | |
# The type of runner that the job will run on | |
runs-on: ${{ matrix.os || 'ubuntu-22.04' }} | |
defaults: | |
run: | |
shell: ${{ matrix.shell || 'bash'}} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-22.04 | |
node-version: | |
- "16" | |
task-name: | |
- vscode | |
- test-node14 | |
- test-node16 | |
upload-artifact: | |
- false | |
name: | |
- false | |
include: | |
- name: lint | |
task-name: lint | |
- name: docs | |
task-name: docs | |
- name: test-without-ee (wsl) | |
# runner does not support running container | |
task-name: test-without-ee | |
# https://github.com/actions/virtual-environments/issues/5151 | |
os: windows-2022 | |
shell: "wsl-bash {0}" | |
- name: test-without-ee (macos) | |
os: macos-12 | |
# runner does not support running container | |
task-name: test-without-ee | |
skip_docker: "1" | |
skip_podman: "1" | |
steps: | |
- name: Disable autocrlf | |
if: "contains(matrix.os, 'windows')" | |
run: |- | |
git config --global core.autocrlf false | |
git config --global core.eol lf | |
shell: bash # <-- keep it here to avoid using default shell | |
- uses: actions/checkout@v4 | |
# https://github.com/marketplace/actions/setup-wsl | |
- name: Activate WSL | |
if: "contains(matrix.shell, 'wsl')" | |
uses: Vampire/[email protected] | |
with: | |
set-as-default: 'true' | |
# we want to load user profile | |
# https://github.com/Vampire/setup-wsl#wsl-shell-command | |
wsl-shell-command: "bash -euo pipefail" | |
# https://github.com/MicrosoftDocs/WSL/blob/main/WSL/wsl-config.md#L159 | |
wsl-conf: | | |
[automount] | |
enabled = true | |
root = / | |
options = "metadata,umask=077" | |
[interop] | |
enabled = false | |
appendWindowsPath = false | |
[network] | |
hostname = wsl | |
additional-packages: | |
curl | |
git | |
make | |
python3-dev | |
python3-pip | |
python3-venv | |
qemu-user-static | |
xvfb | |
- name: Set up Python ${{ matrix.python_version || '3.10' }} | |
if: "!contains(matrix.shell, 'wsl')" | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python_version || '3.10' }} | |
- name: Enable caching | |
if: "!contains(matrix.shell, 'wsl')" | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cache/npm | |
~/.cache/pip | |
~/.cache/yarn | |
~/.nvm/.cache | |
~/Library/Caches/pip | |
key: > | |
${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles( | |
'package.json', | |
'package-lock.json', | |
'.config/Dockerfile' | |
) }} | |
- name: Enable caching for podman-machine | |
uses: actions/cache@v4 | |
if: "contains(matrix.os, 'macos')" | |
with: | |
path: | | |
~/.local/share/containers | |
~/.config/containers | |
key: ${{ runner.os }}-${{ matrix.task-name }}-${{ hashFiles('package.json', 'yarn.lock', '.config/Dockerfile', '**/Taskfile.yml', 'tools/*.*') }} | |
- name: Install Task | |
if: "!contains(matrix.shell, 'wsl')" | |
uses: arduino/setup-task@v1 | |
with: | |
version: 3.x | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install Task (wsl) | |
if: "contains(matrix.shell, 'wsl')" | |
run: | | |
sudo apt-get update && sudo apt-get install -y curl | |
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b /usr/local/bin | |
task --version | |
- name: Dump node version into .nvmrc file | |
# save node version in .nvmrc file by looking for a pattern like | |
# node12 in job name. If pattern is not found it uses 'current' alias | |
if: "!contains(matrix.shell, 'wsl')" | |
run: > | |
python3 -c 'import os, re; | |
v = re.search("node(\d+)", os.environ.get("JOB_NAME", "")) or ["", "current"]; | |
print(v[1])' > .nvmrc | |
- name: Use node | |
# as Windows executables are exposed inside WSL at top of PATH, we | |
# would end with broken npm script in PATH on wsl. | |
if: "!contains(matrix.shell, 'wsl')" | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: '.nvmrc' | |
- name: Install task inside WSL | |
if: "contains(matrix.shell, 'wsl')" | |
run: | | |
mkdir -p ~/.local/bin | |
sh -c "$(curl --location https://taskfile.dev/install.sh)" -- -d -b ~/.local/bin | |
echo $PATH | |
command -v task | |
- run: task setup | |
- name: task ${{ matrix.task-name }} | |
run: task -v ${{ matrix.task-name }} | |
### Uncomment to hold the runner node for debugging | |
# - uses: actions/checkout@v2 | |
# - name: Setup tmate session | |
# if: ${{ failure() }} | |
# uses: mxschmitt/action-tmate@v3 | |
- name: Gather logs | |
if: ${{ always() }} | |
run: | | |
mkdir -p out/vscode | |
cp -r ../vscode-ansible/out/userdata/logs/* out/vscode || true | |
- name: Upload test logs | |
if: ${{ always() }} | |
uses: actions/upload-artifact@v4 | |
with: | |
name: logs-${{ matrix.os }}-${{ matrix.task-name }}.zip | |
path: | | |
out/vscode | |
out/e2eTestReport | |
out/log | |
out/test-resources/settings/logs | |
out/userdata/logs | |
if-no-files-found: ignore | |
retention-days: 15 | |
- name: Stop services | |
if: "contains(matrix.os, 'macos')" | |
# Stopping podman machine is needed or caching it will fail | |
run: | | |
command -v podman && { | |
podman machine stop | |
while [[ "$(podman machine ls --format '{{.Running}}' \ | |
--noheading || true)" != "false" ]]; do | |
sleep 1 | |
echo -n . | |
done | |
echo . | |
} | |
continue-on-error: true | |
check: # This job does nothing and is only used for the branch protection | |
if: always() | |
runs-on: ubuntu-22.04 | |
needs: | |
- test | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} |