CircleCI-like caching utility
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
cmd
template
vendor
.dockerignore
.gitignore
Dockerfile
Gopkg.lock
Gopkg.toml
LICENSE
README.md
main.go

README.md

guruguru-cache

CircleCI-like caching utility

Caution (1): This tool is still under development. The spec might be changed in the near future.

Caution (2): This tool is not stable yet. When you try running, please do it in an isolated environment like a Docker container.

Problem

This is mainly for optimizing operations taking a long time like bundle install inside docker build.

When building a Docker image for Rails app, bundle install fetches & installs all of the gems from scratch. It takes a long time especially for native extension like nokogiri.

When the layer of RUN bundle install is cached by Docker, it's okay. But if Gemfile.lock is updated, the next docer build re-fetches & re-installs all of the gems again!

guruguru-cache stores and restores cache files to optimize installation.

Usage

Prerequisites

Cache files are stored into a bucket of Amazon S3.

You need to create a bucket and an IAM user having permissions for the bucket.

Access keys can be specified with environment variables defined by AWS SDK for Go.

In a basic case, you need to set these variables:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_REGION

Installation

Currently, there are no binary releases. So you need to build by yourself or copying from a Docker image is useful.

# In Dockerfile
COPY --from=yuyat/guruguru-cache /usr/local/bin/guruguru-cache /usr/local/bin

Store cache

$ guruguru-cache store [flags] [cache key] [paths...]

Flags:
  -h, --help               help for store
      --s3-bucket string   S3 bucket to upload

Example

$ guruguru-cache store --s3-bucket=example-cache \
  'gem-v1-{{ arch }}-{{ checksum "Gemfile.lock" }}' \
  vendor/bundle

Restore cache

$ guruguru-cache restore [flags] [cache keys...]

Flags:
  -h, --help               help for restore
      --s3-bucket string   S3 bucket to upload

Example

$ guruguru-cache restore --s3-bucket=example-cache \
  'gem-v1-{{ arch }}-{{ checksum "Gemfile.lock" }}' \
  'gem-v1-{{ arch }}'

Cache key template

  • {{ checksum "FILEPATH" }}: MD5 checksum of an arbitrary file
  • {{ arch }}: CPU architecture
  • {{ epoch }}: UNIX timestamp
  • {{ .Environment.FOO }}: Environment variables