diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 815f95d..96e6966 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -19,6 +19,35 @@ jobs: steps: - uses: actions/checkout@v4 + # setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70 + # -dev packages before unpacking the build (#178). Ubuntu's own image + # deletes the .debs after install, so every job re-downloads them from + # the archive. Keep them and restore them from the cache server, which + # lives in the cluster, turning a WAN download into a local one. + # + # The dep list is the same for every PHP version on the builder path, so + # one shared key serves them all. Only the .debs are cached, never + # /var/lib/apt/lists — a stale index is how you get 404s on install. + - name: Keep downloaded .debs + run: | + sudo rm -f /etc/apt/apt.conf.d/docker-clean + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \ + | sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null + + - name: Cache apt packages + uses: actions/cache@v3 + with: + path: /var/cache/apt/archives/*.deb + key: apt-php-builder-deps-${{ runner.arch }}-v1 + + # Temporary, for #178: shows whether the cache actually served the + # builder's dependencies, and times the step that consumes them. + - name: Report restored .debs + run: | + echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)" + echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)" + date -u +'setup-php start: %H:%M:%S' + - name: Setup PHP uses: shivammathur/setup-php@v2 with: @@ -54,6 +83,35 @@ jobs: steps: - uses: actions/checkout@v4 + # setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70 + # -dev packages before unpacking the build (#178). Ubuntu's own image + # deletes the .debs after install, so every job re-downloads them from + # the archive. Keep them and restore them from the cache server, which + # lives in the cluster, turning a WAN download into a local one. + # + # The dep list is the same for every PHP version on the builder path, so + # one shared key serves them all. Only the .debs are cached, never + # /var/lib/apt/lists — a stale index is how you get 404s on install. + - name: Keep downloaded .debs + run: | + sudo rm -f /etc/apt/apt.conf.d/docker-clean + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \ + | sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null + + - name: Cache apt packages + uses: actions/cache@v3 + with: + path: /var/cache/apt/archives/*.deb + key: apt-php-builder-deps-${{ runner.arch }}-v1 + + # Temporary, for #178: shows whether the cache actually served the + # builder's dependencies, and times the step that consumes them. + - name: Report restored .debs + run: | + echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)" + echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)" + date -u +'setup-php start: %H:%M:%S' + - name: Setup PHP uses: shivammathur/setup-php@v2 with: @@ -97,6 +155,35 @@ jobs: steps: - uses: actions/checkout@v4 + # setup-php installs PHP 8.3+ through php-builder, which apt-installs ~70 + # -dev packages before unpacking the build (#178). Ubuntu's own image + # deletes the .debs after install, so every job re-downloads them from + # the archive. Keep them and restore them from the cache server, which + # lives in the cluster, turning a WAN download into a local one. + # + # The dep list is the same for every PHP version on the builder path, so + # one shared key serves them all. Only the .debs are cached, never + # /var/lib/apt/lists — a stale index is how you get 404s on install. + - name: Keep downloaded .debs + run: | + sudo rm -f /etc/apt/apt.conf.d/docker-clean + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \ + | sudo tee /etc/apt/apt.conf.d/99keep-downloaded-packages >/dev/null + + - name: Cache apt packages + uses: actions/cache@v3 + with: + path: /var/cache/apt/archives/*.deb + key: apt-php-builder-deps-${{ runner.arch }}-v1 + + # Temporary, for #178: shows whether the cache actually served the + # builder's dependencies, and times the step that consumes them. + - name: Report restored .debs + run: | + echo "restored .debs: $(ls /var/cache/apt/archives/*.deb 2>/dev/null | wc -l)" + echo "restored size: $(du -sh /var/cache/apt/archives 2>/dev/null | cut -f1)" + date -u +'setup-php start: %H:%M:%S' + - name: Setup PHP uses: shivammathur/setup-php@v2 with: