Skip to content

fix(cluster): refuse Docker Compose 2.37.1 to 2.38.x #5

fix(cluster): refuse Docker Compose 2.37.1 to 2.38.x

fix(cluster): refuse Docker Compose 2.37.1 to 2.38.x #5

Workflow file for this run

name: Headscale Litestream
# Runs tests/litestream/run.sh: the headscale_hosted provider with Litestream and a warm standby against an S3-compatible store, a real Tailscale client, promotion of the standby, and the headscale_in_cluster guard. Only on changes that can affect them.
#
# Runs on GitHub-hosted ubuntu-latest, which has the Docker daemon the test needs. The work directory sits under runner.temp, which the job always has write access to.
on:
pull_request:
paths:
- roles/github_runner_cluster/tasks/mesh/headscale_*.yml
- roles/github_runner_cluster/tasks/headscale_promote.yml
- roles/github_runner_cluster/templates/headscale/**
- roles/github_runner_cluster/files/headscale/**
- roles/github_runner_cluster/defaults/main.yml
- playbooks/promote_headscale_standby.yml
- tests/litestream/**
- .github/workflows/litestream.yml
workflow_dispatch:
concurrency:
group: litestream-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
litestream:
name: Litestream and standby promotion
runs-on: ubuntu-latest
timeout-minutes: 30
env:
COMPOSE_VERSION: v5.5.1
steps:
- uses: actions/checkout@v7
- name: Install the pinned Docker Compose
# Always the pinned version, not whatever the runner has: ubuntu-latest has shipped Compose releases the cluster role refuses (see its tasks/main.yml). The user plugin directory takes precedence over the system one.
run: |
set -euo pipefail
docker version --format 'Docker Engine {{.Server.Version}}'
case "$(uname -m)" in
x86_64) arch=x86_64 ;;
aarch64 | arm64) arch=aarch64 ;;
*) echo "Unsupported architecture: $(uname -m)" >&2; exit 1 ;;
esac
mkdir -p "${HOME}/.docker/cli-plugins"
base="https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/docker-compose-linux-${arch}"
curl -fsSL -o "${RUNNER_TEMP}/docker-compose" "$base"
echo "$(curl -fsSL "${base}.sha256" | cut -d' ' -f1) ${RUNNER_TEMP}/docker-compose" | sha256sum -c -
install -m 0755 "${RUNNER_TEMP}/docker-compose" "${HOME}/.docker/cli-plugins/docker-compose"
docker compose version
- name: Install Ansible
run: |
set -euo pipefail
if ! python3 -m venv "${RUNNER_TEMP}/venv" 2>/dev/null; then
sudo apt-get update -qq
sudo apt-get install -y -qq python3-venv
python3 -m venv "${RUNNER_TEMP}/venv"
fi
"${RUNNER_TEMP}/venv/bin/pip" install --quiet --prefer-binary ansible-core
"${RUNNER_TEMP}/venv/bin/ansible-galaxy" collection install -r ansible/requirements.yml -p "${RUNNER_TEMP}/collections"
echo "${RUNNER_TEMP}/venv/bin" >> "$GITHUB_PATH"
- name: Run the test
env:
GRTEST_WORK: ${{ runner.temp }}/grtest-ls
GRTEST_EXTRA_COLLECTIONS: ${{ runner.temp }}/collections
run: tests/litestream/run.sh
required-checks:
name: Headscale Litestream result
needs: [litestream]
if: always()
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Fail if the test failed or was cancelled
run: |
if [[ "${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}" == "true" ]]; then
echo "The test did not succeed:"
echo '${{ toJSON(needs) }}'
exit 1
fi