Giter VIP home page Giter VIP logo

buildkit-cache-dance's Introduction

The BuildKit Cache Dance: save RUN --mount=type=cache caches on GitHub Actions

The BuildKit Cache Dance allows saving RUN --mount=type=cache caches on GitHub Actions.

Use cases:

  • apt-get (/var/cache/apt, /var/lib/apt)
  • Go (/root/.cache/go-build)
  • etc.

This reproducible-containers/buildkit-cache-dance action was forked from overmindtech/buildkit-cache-dance (archived on September 2023). This action be used for "non-reproducible" containers too.

Examples

apt-get

Dockerfile:

FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN \
  --mount=type=cache,target=/var/cache/apt,sharing=locked \
  --mount=type=cache,target=/var/lib/apt,sharing=locked \
  rm -f /etc/apt/apt.conf.d/docker-clean && \
  echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' >/etc/apt/apt.conf.d/keep-cache && \
  apt-get update && \
  apt-get install -y gcc

Action:

---
name: Build
on: push

jobs:
  build:
    name: Build
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v3
      - uses: docker/metadata-action@v5
        id: meta
        with:
          images: YOUR_IMAGE
      - name: Cache var-cache-apt
        uses: actions/cache@v3
        with:
          path: var-cache-apt
          key: var-cache-apt-${{ hashFiles('Dockerfile') }}
      - name: Cache var-lib-apt
        uses: actions/cache@v3
        with:
          path: var-lib-apt
          key: var-lib-apt-${{ hashFiles('Dockerfile') }}
      - name: inject var-cache-apt into docker
        uses: reproducible-containers/[email protected]
        with:
          cache-source: var-cache-apt
          cache-target: /var/cache/apt
      - name: inject var-lib-apt into docker
        uses: reproducible-containers/[email protected]
        with:
          cache-source: var-lib-apt
          cache-target: /var/lib/apt
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          cache-from: type=gha
          cache-to: type=gha,mode=max
          file: Dockerfile
          push: ${{ github.event_name != 'pull_request' }}
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}

Real-world examples:

Releases

v1

v1 follows the original design of overmindtech/buildkit-cache-dance.

v1 is composed of two actions:

See the releases/v1 branch.

v2

v2 is composed of the single reproducible-containers/buildkit-cache-dance action.

Acknowledgement

buildkit-cache-dance's People

Contributors

akihirosuda avatar davids-ovm avatar dylanratcliffe avatar johanneswuerbach avatar kskalski avatar shukantpal avatar shyim avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.