diff --git a/.github/workflows/integration-test-template.yml b/.github/workflows/integration-test-template.yml index 0a884814..5ed2fca6 100644 --- a/.github/workflows/integration-test-template.yml +++ b/.github/workflows/integration-test-template.yml @@ -67,6 +67,24 @@ jobs: with: name: postgres-image path: /tmp/artifacts + - name: Pin Docker to v28 (avoid v29 breaking changes) + run: | + # Docker 29 breaks docker build via Go client libraries and + # docker load/save with certain tarball formats. + # Pin to Docker 28.x until our tooling is updated. + # https://github.com/actions/runner-images/issues/13474 + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update -qq + VERSION=$(apt-cache madison docker-ce | grep '28\.5' | head -1 | awk '{print $3}') + sudo apt-get install -y --allow-downgrades \ + "docker-ce=${VERSION}" "docker-ce-cli=${VERSION}" + sudo systemctl restart docker + docker version - name: Load Docker images, Go cache, and prepare binary run: | gunzip -c /tmp/artifacts/headscale-image.tar.gz | docker load diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4835e255..f2eeacb4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,6 +17,25 @@ jobs: with: fetch-depth: 0 + - name: Pin Docker to v28 (avoid v29 breaking changes) + run: | + # Docker 29 breaks docker build via Go client libraries and + # docker load/save with certain tarball formats. + # Pin to Docker 28.x until our tooling is updated. + # https://github.com/actions/runner-images/issues/13474 + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update -qq + VERSION=$(apt-cache madison docker-ce | grep '28\.5' | head -1 | awk '{print $3}') + sudo apt-get install -y --allow-downgrades \ + "docker-ce=${VERSION}" "docker-ce-cli=${VERSION}" + sudo systemctl restart docker + docker version + - name: Login to DockerHub uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # v3.6.0 with: diff --git a/.github/workflows/test-integration.yaml b/.github/workflows/test-integration.yaml index 3a16c68f..1dfd10ee 100644 --- a/.github/workflows/test-integration.yaml +++ b/.github/workflows/test-integration.yaml @@ -69,6 +69,25 @@ jobs: name: go-cache path: go-cache.tar.gz retention-days: 10 + - name: Pin Docker to v28 (avoid v29 breaking changes) + if: steps.changed-files.outputs.files == 'true' + run: | + # Docker 29 breaks docker build via Go client libraries and + # docker load/save with certain tarball formats. + # Pin to Docker 28.x until our tooling is updated. + # https://github.com/actions/runner-images/issues/13474 + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update -qq + VERSION=$(apt-cache madison docker-ce | grep '28\.5' | head -1 | awk '{print $3}') + sudo apt-get install -y --allow-downgrades \ + "docker-ce=${VERSION}" "docker-ce-cli=${VERSION}" + sudo systemctl restart docker + docker version - name: Build headscale image if: steps.changed-files.outputs.files == 'true' run: | @@ -104,6 +123,24 @@ jobs: needs: build if: needs.build.outputs.files-changed == 'true' steps: + - name: Pin Docker to v28 (avoid v29 breaking changes) + run: | + # Docker 29 breaks docker build via Go client libraries and + # docker load/save with certain tarball formats. + # Pin to Docker 28.x until our tooling is updated. + # https://github.com/actions/runner-images/issues/13474 + sudo install -m 0755 -d /etc/apt/keyrings + curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ + | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ + https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \ + | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + sudo apt-get update -qq + VERSION=$(apt-cache madison docker-ce | grep '28\.5' | head -1 | awk '{print $3}') + sudo apt-get install -y --allow-downgrades \ + "docker-ce=${VERSION}" "docker-ce-cli=${VERSION}" + sudo systemctl restart docker + docker version - name: Pull and save postgres image run: | docker pull postgres:latest