Add custom GitHub action for docker tag and push

- if the push refers a branch the docker tag will be branch-sha
- if the push refers a git tag the docker tag will be th git tag
This commit is contained in:
Stefan Prodan
2018-10-26 14:29:16 +03:00
parent 7d4c89d965
commit d3208cd8ac
3 changed files with 46 additions and 59 deletions
+19
View File
@@ -0,0 +1,19 @@
FROM docker:stable
LABEL "name"="Docker tag and push action"
LABEL "maintainer"="Stefan Prodan <support@gweave.works>"
LABEL "version"="1.0.0"
LABEL "com.github.actions.icon"="terminal"
LABEL "com.github.actions.color"="gray-dark"
LABEL "com.github.actions.name"="Docker Publish"
LABEL "com.github.actions.description"="This is an Action to run docker tag and push commands."
RUN apk update \
&& apk add --no-cache ca-certificates bash git curl \
&& (apk info | xargs -n1 -I{} apk --quiet add {}-doc); true \
&& rm -rf /var/cache/apk/*
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
+19
View File
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
echo "Starting tag and push for image ${DOCKER_IMAGE} release ${GITHUB_REF}"
DOCKER_TAG="latest"
if [[ "${GITHUB_REF}" == "refs/tags"* ]]; then
DOCKER_TAG=$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)
else
DOCKER_TAG=$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)-$(echo ${GITHUB_SHA} | head -c7)
fi
docker tag app ${DOCKER_IMAGE}:${DOCKER_TAG}
docker push ${DOCKER_IMAGE}:${DOCKER_TAG}
echo "Docker image pushed to ${DOCKER_IMAGE}:${DOCKER_TAG}"
+8 -59
View File
@@ -1,72 +1,21 @@
workflow "Publish branch" {
workflow "Publish container" {
on = "push"
resolves = ["Is branch", "Push branch"]
resolves = ["Docker tag and push"]
}
action "Is branch" {
uses = "actions/bin/filter@master"
args = "ref refs/heads/*"
}
action "Test and build branch" {
needs = ["Is branch"]
action "Test and build" {
uses = "actions/docker/cli@master"
args = "build -t app -f Dockerfile.ci ."
}
action "Tag branch" {
needs = ["Test and build branch"]
uses = "actions/docker/cli@master"
args = "tag app ${DOCKER_IMAGE}:$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)-$(echo ${GITHUB_SHA} | head -c7)"
secrets = ["DOCKER_IMAGE"]
}
action "Login branch" {
needs = ["Tag branch"]
action "Docker login" {
needs = ["Test and build"]
uses = "actions/docker/login@master"
secrets = ["DOCKER_USERNAME", "DOCKER_PASSWORD"]
}
action "Push branch" {
needs = ["Login branch"]
uses = "actions/docker/cli@master"
args = "push ${DOCKER_IMAGE}:$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)-$(echo ${GITHUB_SHA} | head -c7)"
secrets = ["DOCKER_IMAGE"]
}
workflow "Publish release" {
on = "release"
resolves = ["Push release"]
}
action "Is release" {
uses = "actions/bin/filter@master"
args = "ref refs/tags/v*"
}
action "Test and build release" {
needs = ["Is release"]
uses = "actions/docker/cli@master"
args = "build -t app -f Dockerfile.ci ."
}
action "Login release" {
needs = ["Test and build release"]
uses = "actions/docker/login@master"
secrets = ["DOCKER_USERNAME", "DOCKER_PASSWORD"]
}
action "Tag release" {
needs = ["Login release"]
uses = "actions/docker/cli@master"
args = "tag app ${DOCKER_IMAGE}:$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)"
secrets = ["DOCKER_IMAGE"]
}
action "Push release" {
needs = ["Tag release"]
uses = "actions/docker/cli@master"
args = "push ${DOCKER_IMAGE}:$(echo ${GITHUB_REF} | rev | cut -d/ -f1 | rev)"
action "Docker tag and push" {
needs = ["Docker login"]
uses = "./.github/actions/docker"
secrets = ["DOCKER_IMAGE"]
}