Skip to content

test9

test9 #40

Workflow file for this run

name: CI
on:
workflow_dispatch:
push:
permissions:
contents: read
packages: write
jobs:
tests:
runs-on: ubuntu-24.04
strategy:
matrix:
version: [v1, v2]
steps:
- uses: actions/checkout@v4
- uses: "opensafely-core/setup-action@v1"
with:
install-just: true
- name: Install uv
uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355
- name: Remove unnecessary directories to free up space
run: |
echo "Disk space before cleanup:"
df -h
sudo rm -rf /usr/local/.ghcup
sudo rm -rf /opt/hostedtoolcache/CodeQL
sudo rm -rf /usr/local/lib/android/sdk/ndk
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/share/boost
sudo apt-get clean
echo "Disk space after cleanup:"
df -h
# Debug step to find cache locations
- name: Debug BuildKit locations
run: |
echo "Checking potential BuildKit cache locations:"
sudo ls -la /var/lib/buildkit || echo "/var/lib/buildkit does not exist"
sudo ls -la /var/lib/docker/buildkit || echo "/var/lib/docker/buildkit does not exist"
sudo find /var/lib/docker -name "buildkit" 2>/dev/null || echo "No buildkit directory found in /var/lib/docker"
- name: Calculate cache key content hash
id: cache_content_key
# Because we want to dynamically include matrix.version in the path, we
# cannot use GHAs hashFiles construct, and have to DIY it.
run: |
if [ "${{ matrix.version }}" = "v1" ]; then
# v1 uses renv
path="v1/renv.lock"
else
# v2+ use our custom toml format, in the matrix.version subdir
path="${{ matrix.version }}/packages.toml"
fi
key=$(sha256sum $path | awk '{print $1}')
echo "cache_content_key=$key" >> "$GITHUB_OUTPUT"
echo "Generated cache_content_key for $path: $key"
# Prepare our cache directory
- name: Prepare cache directory
run: |
sudo mkdir -p /home/runner/buildkit-cache
sudo chown -R $USER:$USER /home/runner/buildkit-cache
- name: Cache Docker buildx caches
uses: actions/cache@v4
with:
path: /home/runner/buildx-cache
key: ${{ runner.os }}-${{ matrix.version }}-buildx-${{ steps.cache_content_key.outputs.cache_content_key }}
# fallback to older cache keys if needed
restore-keys: |
${{ runner.os }}-${{ matrix.version }}-buildx-
lookup-only: false
enableCrossOsArchive: true
# If cache was restored, copy it to BuildKit's location
- name: Restore cache to BuildKit
run: |
if [ -d "/home/runner/buildkit-cache" ] && [ "$(ls -A /home/runner/buildkit-cache)" ]; then
sudo rm -rf /var/lib/docker/buildkit/*
sudo cp -r /home/runner/buildkit-cache/* /var/lib/docker/buildkit/
fi
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca
with:
cleanup: false
- name: Debug BuildKit location
run: |
set -x
echo "BuildKit processes:"
ps aux | grep buildkit
echo "Default BuildKit location contents:"
sudo ls -la /var/lib/docker/buildkit || echo "/var/lib/docker/buildkit does not exist"
- name: check
run: just check
- name: Build image
run: just build ${{ matrix.version }}
- name: DEBUG
run: |
set -x
echo "Debugging BuildKit cache locations:"
sudo ls -la /var/lib/docker || echo "No /var/lib/docker"
sudo ls -la /var/lib/docker/buildkit || echo "No /var/lib/docker/buildkit"
sudo find /var/lib/docker -name "buildkit" -type d 2>/dev/null || echo "No buildkit directories found"
echo "BuildKit processes:"
ps aux | grep buildkit
echo "du"
sudo du -sh /var/lib/docker/buildkit
echo "Docker info:"
docker info | grep -i build
- name: Run tests
run: just test ${{ matrix.version }}
- name: DEBUG
run: |
set -x
echo "Debugging BuildKit cache locations:"
sudo ls -la /var/lib/docker || echo "No /var/lib/docker"
sudo ls -la /var/lib/docker/buildkit || echo "No /var/lib/docker/buildkit"
sudo find /var/lib/docker -name "buildkit" -type d 2>/dev/null || echo "No buildkit directories found"
echo "BuildKit processes:"
ps aux | grep buildkit
echo "du"
sudo du -sh /var/lib/docker/buildkit
echo "Docker info:"
docker info | grep -i build
- name: Build rstudio
run: just build-rstudio ${{ matrix.version }}
- name: DEBUG
run: |
set -x
echo "Debugging BuildKit cache locations:"
sudo ls -la /var/lib/docker || echo "No /var/lib/docker"
sudo ls -la /var/lib/docker/buildkit || echo "No /var/lib/docker/buildkit"
sudo find /var/lib/docker -name "buildkit" -type d 2>/dev/null || echo "No buildkit directories found"
echo "BuildKit processes:"
ps aux | grep buildkit
echo "du"
sudo du -sh /var/lib/docker/buildkit
echo "Docker info:"
docker info | grep -i build
- name: Test rstudio
run: |
just _env # ideally needs creating before we run the tests
just test-rstudio ${{ matrix.version }}
- name: DEBUG
run: |
set -x
echo "Debugging BuildKit cache locations:"
sudo ls -la /var/lib/docker || echo "No /var/lib/docker"
sudo ls -la /var/lib/docker/buildkit || echo "No /var/lib/docker/buildkit"
sudo find /var/lib/docker -name "buildkit" -type d 2>/dev/null || echo "No buildkit directories found"
echo "BuildKit processes:"
ps aux | grep buildkit
echo "du"
sudo du -sh /var/lib/docker/buildkit
echo "Docker info:"
docker info | grep -i build
- name: Save BuildKit cache
if: always() # Run even if previous steps failed
run: |
sudo rm -rf /home/runner/buildkit-cache/*
sudo cp -r /var/lib/docker/buildkit/* /home/runner/buildkit-cache/
sudo chown -R $USER:$USER /home/runner/buildkit-cache
- name: Log into GitHub Container Registry
if: github.ref == 'refs/heads/main'
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin
- name: Publish images
if: github.ref == 'refs/heads/main'
run:
just publish ${{ matrix.version }}
just publish-rstudio ${{ matrix.version }}