Skip to content
This repository has been archived by the owner on Oct 9, 2024. It is now read-only.

Build updates

Build updates #755

Workflow file for this run

# 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) }}