From d1bb47bfd2ee5ecf5114c09cf613bc53e87e6c72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20=C3=81lvaro?= Date: Mon, 8 Jun 2020 21:37:55 +0200 Subject: [PATCH] feat: Add Publish GitHub workflow --- .github/workflows/publish.yml | 90 +++++++++++++++++++++++++++++++++++ README.md | 6 +-- 2 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..4873e5e --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,90 @@ +name: Publish + +on: + push: + branches: + - master + release: + types: + - created + +env: + GITHUB_REF_NAME: ${{ github.event.release.tag_name }} + IMAGE_NAME: cdalvaro/saltstack-master + PLATFORMS: linux/amd64 linux/arm64 linux/arm/v7 + DOCKER_CLI_EXPERIMENTAL: enabled + +jobs: + build-and-publish: + name: Build and publish + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Enable Docker experimental + run: | + # Enable docker daemon experimental support. + echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + # Install QEMU multi-architecture support for docker buildx. + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Instantiate docker buildx builder + run: | + docker buildx create --use + docker buildx inspect --bootstrap + + - name: Cache latest images + run: | + for PLATFORM in ${PLATFORMS}; do + docker pull --platform "${PLATFORM}" "${IMAGE_NAME}:latest" + done + + - name: Log in to Docker Hub + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u="${{ secrets.DOCKER_USERNAME }}" --password-stdin + + - name: Build and push Docker image + run: | + docker buildx build \ + --platform "${PLATFORMS// /,}" \ + --cache-from "${IMAGE_NAME}:latest" \ + --push --progress plain \ + --build-arg=VCS_REF="${GITHUB_SHA::7}" \ + --build-arg=BUILD_DATE="$(date +"%Y-%m-%d %H:%M:%S%:z")" \ + --tag="${IMAGE_NAME}:${GITHUB_REF_NAME:-latest}" . + + test: + name: Test + runs-on: ubuntu-latest + needs: build-and-publish + steps: + - name: Enable Docker experimental + run: | + # Enable docker daemon experimental support. + echo '{"experimental": true}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + # Install QEMU multi-architecture support for docker buildx. + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + - name: Test images + env: + CONTAINER_NAME: salt_master_test + run: | + IMAGE_TAG="${GITHUB_REF_NAME:-latest}" + DOCKER_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" + for PLATFORM in ${PLATFORMS}; do + echo "Testing docker image ${DOCKER_IMAGE} on platform ${PLATFORM} ..." + # test + docker pull -q --platform "${PLATFORM}" "${DOCKER_IMAGE}" + docker run --rm -d --name "${CONTAINER_NAME}" "${DOCKER_IMAGE}" + docker container ls + sleep 20 + docker exec "${CONTAINER_NAME}" salt --versions + echo "healthcheck" + docker exec "${CONTAINER_NAME}" /usr/local/sbin/healthcheck + # cleanup + docker stop ${CONTAINER_NAME} + docker image rm "${DOCKER_IMAGE}" + done diff --git a/README.md b/README.md index 3ed882e..76dae94 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ [![SaltStack][saltstack_badge]][saltstack_release_notes] [![Ubuntu Image][ubuntu_badge]][ubuntu_hub_docker] -[![Docker Build Status][docker_build_badge]][docker_hub_builds] +[![Publish Workflow][github_publish_badge]][github_publish_workflow] [![Docker Image Size][docker_size_badge]][docker_hub_tags] [![CodeFactor][codefactor_badge]][codefactor_score] @@ -502,8 +502,8 @@ Where `salt-service` is one of: `salt-master` os `salt-api` (if `SALT_API_SERVIC [ubuntu_badge]: https://img.shields.io/badge/ubuntu-bionic--20200403-E95420.svg?style=flat&logo=Ubuntu [ubuntu_hub_docker]: https://hub.docker.com/_/ubuntu/ "Ubuntu Image" -[docker_build_badge]: https://img.shields.io/docker/build/cdalvaro/saltstack-master?logo=docker&style=flat -[docker_hub_builds]: https://hub.docker.com/r/cdalvaro/saltstack-master/builds +[github_publish_badge]: https://github.com/cdalvaro/saltstack-master/workflows/Publish/badge.svg +[github_publish_workflow]: https://github.com/cdalvaro/saltstack-master/actions?query=workflow%3A%22Publish%22 [docker_size_badge]: https://img.shields.io/docker/image-size/cdalvaro/saltstack-master/latest?logo=docker&color=2496ED [docker_hub_tags]: https://hub.docker.com/repository/docker/cdalvaro/saltstack-master/tags