Home

Awesome

Deprecated

This repository is being replaced with docker/build-push-action@v2 which includes significant changes and now uses Docker Buildx. It will not receive any future updates, please update your workflows.

Upgrade notes with many usage examples have been added to handle most use cases.

About

The core code base for Docker's GitHub Actions (https://github.com/features/actions). This code is used to build the docker/github-actions image that provides the functionality used by the published Docker GitHub Action:

github-actions runs a command line tool that shells out to docker to perform the various functions. Parameters are supplied to github-actions using environment variables in the form described by the GitHub Actions documentation. github-actions uses some of the default GitHub Actions environment variables as described in the individual commands section.

Commands

Commands can be called using docker run docker/github-actions {command}

login

Does a docker login using the supplied username and password. Will default to Docker Hub but can be supplied a server address to login to a third-party registry as required.

inputs

Environment VariableRequiredDescription
INPUT_USERNAMEyesUsername to login with
INPUT_PASSWORDyesPassword to login with
INPUT_REGISTRYnoRegistry server to login to. Defaults to Docker Hub

build

Builds and tags a docker image.

inputs

Environment VariableRequiredDescription
INPUT_PATHyesPath to build from
INPUT_DOCKERFILEnoPath to Dockerfile
INPUT_ADD_GIT_LABELSnoAdds git labels (see below)
INPUT_TARGETnoTarget build stage to build
INPUT_BUILD_ARGSnoComma-delimited list of build-args
INPUT_LABELSnoComma-delimited list of labels
INPUT_CACHE_FROMSnoComma-delimited list of cache-froms

See the tagging section for information on tag inputs

Git labels

When INPUT_ADD_GIT_LABELS is true labels are automatically added to the image that contain data about the current state of the git repo based on the standards set out in https://github.com/opencontainers/image-spec/blob/master/annotations.md.

3 labels are supported:

LabelDescription
org.opencontainers.image.createdDate and time on which the image was built (string, date-time as defined by RFC 3339).
org.opencontainers.image.sourceURL to this repository. E.g. https://github.com/myorg/myrepository
org.opencontainers.image.revisionThe full git sha of this commit.

push

Pushes a docker image.

inputs

See the tagging section for information on tag inputs

build-push

Builds, logs in, and pushes a docker image.

inputs

Same as the login and build commands with the addition of

Environment VariableRequiredDescription
INPUT_PUSHnoWill push the image if true

Tagging

Tagging of images can be set manually, left to github-actions to automate, or a combination of the both.

There are 4 input variables used for tagging

Environment VariableRequiredDescription
INPUT_REGISTRYnoRegistry server to tag with
INPUT_REPOSITORYyesRepository to tag with
INPUT_TAGSnoHard coded comma-delimited list of tags
INPUT_TAG_WITH_REFnoIf true then github-actions will add tags depending on the git ref automatically as described below
INPUT_TAG_WITH_SHAnoIf true then github-actions will add a tag in the form sha-{git-short-sha}

If INPUT_REGISTRY is set then all tags are prefixed with {INPUT_REGISTRY}/{INPUT_REPOSITORY}:. If not then all tags are prefixed with {INPUT_REPOSITORY}:

Auto tags depend on the git reference that the run is associated with. The reference is passed to github-actions using the GitHub actions GITHUB_REF enviroment variable.

If the reference is refs/heads/{branch-name} then the tag {branch-name} is added. For the master branch the {branch-name} is replaced with latest.

If the reference is refs/pull/{pr} then the tag pr-{pr} is added.

If the reference is refs/tags/{tag-name} then the tag {tag-name} is added.

Any / in the auto tags are replaced with -.

For example if the environment variables are as follows:

VariableValue
INPUT_REGISTRY
INPUT_REPOSITORYmyorg/myimage
INPUT_TAGSfoo,bar
INPUT_TAG_WITH_REFtrue
GITHUB_REFrefs/tags/v0.1

Then the image will be tagged with:

myorg/myimage:foo
myorg/myimage:bar
myorg/myimage:v0.1

If the variables are as follows:

VariableValue
INPUT_REGISTRYmyregistry
INPUT_REPOSITORYmyorg/myimage
INPUT_TAGSfoo,bar
INPUT_TAG_WITH_REFtrue
INPUT_TAG_WITH_SHAtrue
GITHUB_REFrefs/heads/master
GITHUB_SHAc6df8c68eb71799f9c9ab4a4a4650d6aabd7e415

Then the image will be tagged with:

myregistry/myorg/myimage:foo
myregistry/myorg/myimage:bar
myregistry/myorg/myimage:lastest
myregistry/myorg/myimage:sha-c6df8c6

Building github-actions

The code is written in Go v1.13 with go mod. It can be built locally using the Makefile or in docker using the docker.Makefile.

make -f docker.Makefile will build the code, check the linting using golangci-lint, run the go tests, and build the image with a tag of docker/github-actions:latest

make -f docker.Makefile image will build the github-actions image without a tag and without running test or lint checking

make -f docker.Makefile cli will build the cli and copy it to ./bin/github-actions

make -f docker.Makefile test will run the unit and e2e tests