From d354f9630a7f4dc7b14c0a1bd66f802f48d94182 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 17 Apr 2021 12:44:01 +0200 Subject: [PATCH] Use build args instead of envs for the version, date & commit --- .github/workflows/publish.yml | 302 +++++++++++++++++++--------------- backend/Dockerfile | 7 +- neo4j/Dockerfile | 6 +- webapp/Dockerfile | 6 +- 4 files changed, 176 insertions(+), 145 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 24350a81a..701c12aa1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -2,8 +2,8 @@ name: ocelot.social publish CI on: push: - branches: - - master +# branches: +# - master jobs: ############################################################################## @@ -56,7 +56,16 @@ jobs: ########################################################################## - name: Neo4J | Build `community` image run: | - docker build --target community -t "ocelotsocialnetwork/neo4j:latest" -t "ocelotsocialnetwork/neo4j:community" -t "ocelotsocialnetwork/neo4j:${VERSION}" -t "ocelotsocialnetwork/neo4j:${BUILD_VERSION}" neo4j/ + docker build \ + --target community \ + -t "ocelotsocialnetwork/neo4j:latest" \ + -t "ocelotsocialnetwork/neo4j:community" \ + -t "ocelotsocialnetwork/neo4j:${VERSION}" \ + -t "ocelotsocialnetwork/neo4j:${BUILD_VERSION}" \ + --build-arg BUILD_DATE=$BUILD_ DATE \ + --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg BUILD_COMMIT=$BUILD_COMMIT \ + neo4j/ docker save "ocelotsocialnetwork/neo4j" > /tmp/neo4j.tar - name: Upload Artifact uses: actions/upload-artifact@v2 @@ -93,7 +102,15 @@ jobs: ########################################################################## - name: backend | Build `production` image run: | - docker build --target production -t "ocelotsocialnetwork/backend:latest" -t "ocelotsocialnetwork/backend:${VERSION}" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" backend/ + docker build \ + --target production \ + -t "ocelotsocialnetwork/backend:latest" \ + -t "ocelotsocialnetwork/backend:${VERSION}" \ + -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" + --build-arg BUILD_DATE=$BUILD_ DATE \ + --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg BUILD_COMMIT=$BUILD_COMMIT \ + backend/ docker save "ocelotsocialnetwork/backend" > /tmp/backend.tar - name: Upload Artifact uses: actions/upload-artifact@v2 @@ -130,7 +147,15 @@ jobs: ########################################################################## - name: webapp | Build `production` image run: | - docker build --target production -t "ocelotsocialnetwork/webapp:latest" -t "ocelotsocialnetwork/webapp:${VERSION}" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" webapp/ + docker build \ + --target production \ + -t "ocelotsocialnetwork/webapp:latest" \ + -t "ocelotsocialnetwork/webapp:${VERSION}" \ + -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" \ + --build-arg BUILD_DATE=$BUILD_ DATE \ + --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg BUILD_COMMIT=$BUILD_COMMIT \ + webapp/ docker save "ocelotsocialnetwork/webapp" > /tmp/webapp.tar - name: Upload Artifact uses: actions/upload-artifact@v2 @@ -168,7 +193,14 @@ jobs: - name: maintenance | Build `production` image # TODO: --target production run: | - docker build -t "ocelotsocialnetwork/maintenance:latest" -t "ocelotsocialnetwork/maintenance:${VERSION}" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" webapp/ -f webapp/Dockerfile.maintenance + docker build \ + -t "ocelotsocialnetwork/maintenance:latest" \ + -t "ocelotsocialnetwork/maintenance:${VERSION}" \ + -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" \ + --build-arg BUILD_DATE=$BUILD_ DATE \ + --build-arg BUILD_VERSION=$BUILD_VERSION \ + --build-arg BUILD_COMMIT=$BUILD_COMMIT \ + webapp/ -f webapp/Dockerfile.maintenance docker save "ocelotsocialnetwork/maintenance" > /tmp/maintenance.tar - name: Upload Artifact uses: actions/upload-artifact@v2 @@ -176,132 +208,132 @@ jobs: name: docker-maintenance-production path: /tmp/maintenance.tar - ############################################################################## - # JOB: UPLOAD TO DOCKERHUB ################################################### - ############################################################################## - upload_to_dockerhub: - name: Upload to Dockerhub - runs-on: ubuntu-latest - needs: [build_production_neo4j,build_production_backend,build_production_webapp,build_production_maintenance] - env: - DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} - DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - ########################################################################## - # DOWNLOAD DOCKER IMAGES ################################################# - ########################################################################## - - name: Download Docker Image (Neo4J) - uses: actions/download-artifact@v2 - with: - name: docker-neo4j-community - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/neo4j.tar - - name: Download Docker Image (Backend) - uses: actions/download-artifact@v2 - with: - name: docker-backend-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/backend.tar - - name: Download Docker Image (WebApp) - uses: actions/download-artifact@v2 - with: - name: docker-webapp-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/webapp.tar - - name: Download Docker Image (Maintenance) - uses: actions/download-artifact@v2 - with: - name: docker-maintenance-production - path: /tmp - - name: Load Docker Image - run: docker load < /tmp/maintenance.tar - ########################################################################## - # Upload ################################################################# - ########################################################################## - - name: login to dockerhub - run: echo "${DOCKERHUB_TOKEN}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin - - name: Push neo4j - run: docker push --all-tags ocelotsocialnetwork/neo4j - - name: Push backend - run: docker push --all-tags ocelotsocialnetwork/backend - - name: Push webapp - run: docker push --all-tags ocelotsocialnetwork/webapp - - name: Push maintenance - run: docker push --all-tags ocelotsocialnetwork/maintenance - - ############################################################################## - # JOB: GITHUB TAG LATEST VERSION ############################################# - ############################################################################## - github_tag: - name: Tag latest version on Github - runs-on: ubuntu-latest - needs: [upload_to_dockerhub] - steps: - ########################################################################## - # CHECKOUT CODE ########################################################## - ########################################################################## - - name: Checkout code - uses: actions/checkout@v2 - with: - fetch-depth: 0 # Fetch full History for changelog - ########################################################################## - # SET ENVS ############################################################### - ########################################################################## - - name: ENV - VERSION - run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV - - name: ENV - BUILD_DATE - run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV - - name: ENV - BUILD_VERSION - run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV - - name: ENV - BUILD_COMMIT - run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV - ########################################################################## - # Push version tag to GitHub ############################################# - ########################################################################## - # TODO: this will error on duplicate - #- name: package-version-to-git-tag - # uses: pkgdeps/git-tag-action@v2 - # with: - # github_token: ${{ secrets.GITHUB_TOKEN }} - # github_repo: ${{ github.repository }} - # version: ${{ env.VERSION }} - # git_commit_sha: ${{ github.sha }} - # git_tag_prefix: "v" - ########################################################################## - # Push build tag to GitHub ############################################### - ########################################################################## - - name: package-version-to-git-tag + build number - uses: pkgdeps/git-tag-action@v2 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - github_repo: ${{ github.repository }} - version: ${{ env.BUILD_VERSION }} - git_commit_sha: ${{ github.sha }} - git_tag_prefix: "b" - ########################################################################## - # Push release tag to GitHub ############################################# - ########################################################################## - - name: yarn install - run: yarn install - - name: generate changelog - run: yarn auto-changelog --latest-version ${{ env.VERSION }} --unreleased-only - - name: package-version-to-git-release - continue-on-error: true # Will fail if tag exists - id: create_release - uses: actions/create-release@v1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token - with: - tag_name: ${{ env.VERSION }} - release_name: ${{ env.VERSION }} - body_path: ./CHANGELOG.md - draft: false - prerelease: false \ No newline at end of file +# ############################################################################## +# # JOB: UPLOAD TO DOCKERHUB ################################################### +# ############################################################################## +# upload_to_dockerhub: +# name: Upload to Dockerhub +# runs-on: ubuntu-latest +# needs: [build_production_neo4j,build_production_backend,build_production_webapp,build_production_maintenance] +# env: +# DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} +# DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} +# steps: +# ########################################################################## +# # CHECKOUT CODE ########################################################## +# ########################################################################## +# - name: Checkout code +# uses: actions/checkout@v2 +# ########################################################################## +# # DOWNLOAD DOCKER IMAGES ################################################# +# ########################################################################## +# - name: Download Docker Image (Neo4J) +# uses: actions/download-artifact@v2 +# with: +# name: docker-neo4j-community +# path: /tmp +# - name: Load Docker Image +# run: docker load < /tmp/neo4j.tar +# - name: Download Docker Image (Backend) +# uses: actions/download-artifact@v2 +# with: +# name: docker-backend-production +# path: /tmp +# - name: Load Docker Image +# run: docker load < /tmp/backend.tar +# - name: Download Docker Image (WebApp) +# uses: actions/download-artifact@v2 +# with: +# name: docker-webapp-production +# path: /tmp +# - name: Load Docker Image +# run: docker load < /tmp/webapp.tar +# - name: Download Docker Image (Maintenance) +# uses: actions/download-artifact@v2 +# with: +# name: docker-maintenance-production +# path: /tmp +# - name: Load Docker Image +# run: docker load < /tmp/maintenance.tar +# ########################################################################## +# # Upload ################################################################# +# ########################################################################## +# - name: login to dockerhub +# run: echo "${DOCKERHUB_TOKEN}" | docker login -u "${DOCKERHUB_USERNAME}" --password-stdin +# - name: Push neo4j +# run: docker push --all-tags ocelotsocialnetwork/neo4j +# - name: Push backend +# run: docker push --all-tags ocelotsocialnetwork/backend +# - name: Push webapp +# run: docker push --all-tags ocelotsocialnetwork/webapp +# - name: Push maintenance +# run: docker push --all-tags ocelotsocialnetwork/maintenance +# +# ############################################################################## +# # JOB: GITHUB TAG LATEST VERSION ############################################# +# ############################################################################## +# github_tag: +# name: Tag latest version on Github +# runs-on: ubuntu-latest +# needs: [upload_to_dockerhub] +# steps: +# ########################################################################## +# # CHECKOUT CODE ########################################################## +# ########################################################################## +# - name: Checkout code +# uses: actions/checkout@v2 +# with: +# fetch-depth: 0 # Fetch full History for changelog +# ########################################################################## +# # SET ENVS ############################################################### +# ########################################################################## +# - name: ENV - VERSION +# run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV +# - name: ENV - BUILD_DATE +# run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV +# - name: ENV - BUILD_VERSION +# run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV +# - name: ENV - BUILD_COMMIT +# run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV +# ########################################################################## +# # Push version tag to GitHub ############################################# +# ########################################################################## +# # TODO: this will error on duplicate +# #- name: package-version-to-git-tag +# # uses: pkgdeps/git-tag-action@v2 +# # with: +# # github_token: ${{ secrets.GITHUB_TOKEN }} +# # github_repo: ${{ github.repository }} +# # version: ${{ env.VERSION }} +# # git_commit_sha: ${{ github.sha }} +# # git_tag_prefix: "v" +# ########################################################################## +# # Push build tag to GitHub ############################################### +# ########################################################################## +# - name: package-version-to-git-tag + build number +# uses: pkgdeps/git-tag-action@v2 +# with: +# github_token: ${{ secrets.GITHUB_TOKEN }} +# github_repo: ${{ github.repository }} +# version: ${{ env.BUILD_VERSION }} +# git_commit_sha: ${{ github.sha }} +# git_tag_prefix: "b" +# ########################################################################## +# # Push release tag to GitHub ############################################# +# ########################################################################## +# - name: yarn install +# run: yarn install +# - name: generate changelog +# run: yarn auto-changelog --latest-version ${{ env.VERSION }} --unreleased-only +# - name: package-version-to-git-release +# continue-on-error: true # Will fail if tag exists +# id: create_release +# uses: actions/create-release@v1 +# env: +# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token +# with: +# tag_name: ${{ env.VERSION }} +# release_name: ${{ env.VERSION }} +# body_path: ./CHANGELOG.md +# draft: false +# prerelease: false \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile index 2f2b70f04..146e1151a 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -3,15 +3,14 @@ ################################################################################## FROM node:12.19.0-alpine3.10 as base -# ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 -ENV BUILD_DATE="1970-01-01T00:00:00.00Z" +ARG BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(yarn run version)-${BUILD_NUMBER} here so we default to 0.0.0-0 -ENV BUILD_VERSION="0.0.0-0" +ARG BUILD_VERSION="0.0.0-0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 -ENV BUILD_COMMIT="0000000" +ARG BUILD_COMMIT="0000000" ## SET NODE_ENV ENV NODE_ENV="production" ## App relevant Envs diff --git a/neo4j/Dockerfile b/neo4j/Dockerfile index e7931378a..79c4fb303 100644 --- a/neo4j/Dockerfile +++ b/neo4j/Dockerfile @@ -5,11 +5,11 @@ FROM neo4j:3.5.14 as community # ENVs (available in production aswell, can be overwritten by commandline or env file) ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 -ENV BUILD_DATE="1970-01-01T00:00:00.00Z" +ARG BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(yarn run version)-${BUILD_NUMBER} here so we default to 0.0.0-0 -ENV BUILD_VERSION="0.0.0-0" +ARG BUILD_VERSION="0.0.0-0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 -ENV BUILD_COMMIT="0000000" +ARG BUILD_COMMIT="0000000" # Labels LABEL org.label-schema.build-date="${BUILD_DATE}" diff --git a/webapp/Dockerfile b/webapp/Dockerfile index eda437920..f4e96e202 100644 --- a/webapp/Dockerfile +++ b/webapp/Dockerfile @@ -7,11 +7,11 @@ FROM node:12.19.0-alpine3.10 as base ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame ENV DOCKER_WORKDIR="/app" ## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0 -ENV BUILD_DATE="1970-01-01T00:00:00.00Z" +ARG BUILD_DATE="1970-01-01T00:00:00.00Z" ## We cannot do $(yarn run version)-${BUILD_NUMBER} here so we default to 0.0.0-0 -ENV BUILD_VERSION="0.0.0-0" +ARG BUILD_VERSION="0.0.0-0" ## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000 -ENV BUILD_COMMIT="0000000" +ARG BUILD_COMMIT="0000000" ## SET NODE_ENV ENV NODE_ENV="production" ## App relevant Envs