Skip to content

Commit

Permalink
Artifact + Matrix - 1
Browse files Browse the repository at this point in the history
Combining both artifact and matrix methods since both workflow is triggered by both push event and workflow_dispatch event.

Workflow dispatch event receives tag via input parameter sent via server workflow.
Push event does not receive any tag and the DOCKER_IMAGE_TAG_2 would have empty value since workflow triggering event and hence input parameter would be empty.
So, was facing the issue of having empty timestamp being suffixed to the docker image tag in the Dockerfiles.

Hence, using the logic of fetching the latest run id and then downloading the artifact uploaded by server workflow to ensure that a non-empty value is also retrieved for the timestamp.
This value is stored in DOCKER_IMAGE_TAG_1 and can be used for building docker image.

Now, depending on the trigger event, the appropriate docker image tag can be used in the docker build command for the --build-arg flag.

Additionally, Dockerfiles now use ARG to use the tags passed from the docker build command, hence using environment variables.

Docker-compose files similarly have the args config parameter set.

Developers would have to set the correct server image tags manually here for the docker-compose command to pass the value to the ARG in the Dockerfile and correctly set the image tag to point to the appropriate server image.
Need to mention somewhere in the ReadME.md to refer to the server image list in Dockerhub to choose the latest image tag. While pushing the image in the GitHub actions, it'll be done manually.

Todo: Change branch name to tags-combo-approach in fetch_runID.py
  • Loading branch information
Mahadik, Mukul Chandrakant authored and Mahadik, Mukul Chandrakant committed May 1, 2024
1 parent 237df16 commit cd9682a
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 32 deletions.
97 changes: 67 additions & 30 deletions .github/workflows/image_build_push.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,15 @@ on:
push:
# Mukul:
# I've added a local test branch on my system and using it for testing image push.
# So, for testing purposes, need to checkout a branch "tags-artifact"
# So, for testing purposes, need to checkout a branch "tags-combo-approach"
# TODO: Need to change to build off master or main once it looks good.
branches: [ tags-artifact ]
branches: [ tags-combo-approach ]

workflow_dispatch:
inputs:
docker_image_tag:
description: "Latest Docker image tags passed from e-mission-server repository on image build and push"
required: true


# Env variable
Expand All @@ -28,7 +34,7 @@ jobs:
run_id: ${{ steps.get_run_id.outputs.run_id }}

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v2
Expand All @@ -50,20 +56,71 @@ jobs:
id: get_run_id
run: echo "run_id=${{ steps.run_script.outputs.run_id }}" >> "$GITHUB_OUTPUT"


fetch_tag:
needs: fetch_run_id
runs-on: ubuntu-latest

env:
RUN_ID: ${{ needs.fetch_run_id.outputs.run_id }}

outputs:
docker_image_tag: ${{ steps.get_docker_tag.outputs.run_id }}

steps:
- uses: actions/checkout@v4

- name: Use Run ID from previous fetch_run_id job
run: echo Run ID from previous job ${{ env.RUN_ID }}

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: docker-image-tag
github-token: ${{ secrets.GH_PAT_TAG }}
repository: MukuFlash03/e-mission-server
run-id: ${{ env.RUN_ID }}

- name: Print artifact tag
id: get_docker_tag
run: |
docker_image_tag=$(cat tag_file.txt)
echo "::set-output name=docker_image_tag::$docker_image_tag" >> "$GITHUB_OUTPUT"
# - name: Upload Artifact
# uses: actions/upload-artifact@v4
# with:
# name: docker-image-tag
# path: tag_file.txt
# overwrite: true

# - name: List artifact
# run: ls -R

# This workflow contains a single job called "build"
build:
needs: fetch_run_id
needs: fetch_tag

# The type of runner that the job will run on
runs-on: ubuntu-latest

env:
RUN_ID: ${{needs.fetch_run_id.outputs.run_id}}
DOCKER_IMAGE_TAG_1: ${{ needs.fetch_tag.outputs.docker_image_tag }}
DOCKER_IMAGE_TAG_2: ${{ github.event.inputs.docker_image_tag }}

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v2

- name: Print input docker image tag
run: |
echo "Event name: ${{ github.event_name }}"
echo "Event name: ${{ github.event.action }}"
echo "Latest docker image tag (push): ${{ env.DOCKER_IMAGE_TAG_1 }}"
echo "Latest docker image tag (workflow_dispatch): ${{ env.DOCKER_IMAGE_TAG_2 }}"
- name: docker login
run: | # log into docker hub account
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
Expand All @@ -79,33 +136,13 @@ jobs:
# Runs a set of commands using the runners shell
# - name: build docker image
# run: |
# docker build -t $DOCKER_USER/${GITHUB_REPOSITORY#*/}:${GITHUB_REF##*/}_${{ steps.date.outputs.date }} .
# if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
# docker build --build-arg DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG_2 -t $DOCKER_USER/${GITHUB_REPOSITORY#*/}:${GITHUB_REF##*/}_${{ steps.date.outputs.date }} .
# else
# docker build --build-arg DOCKER_IMAGE_TAG=$DOCKER_IMAGE_TAG_1 -t $DOCKER_USER/${GITHUB_REPOSITORY#*/}:${GITHUB_REF##*/}_${{ steps.date.outputs.date }} .
# fi
# docker images

# - name: push docker image
# run: |
# docker push $DOCKER_USER/${GITHUB_REPOSITORY#*/}:${GITHUB_REF##*/}_${{ steps.date.outputs.date }}

- name: Use Run ID from previous fetch_run_id job
run: echo Run ID from previous job ${{ needs.fetch_run_id.outputs.run_id }}

- name: Download artifact
uses: actions/download-artifact@v4
with:
name: docker-image-tag
github-token: ${{ secrets.GH_PAT_TAG }}
repository: MukuFlash03/e-mission-server
run-id: ${{ env.RUN_ID }}

- name: Print artifact tag
run: cat tag_file.txt

- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: docker-image-tag
path: tag_file.txt
overwrite: true

- name: List artifact
run: ls -R
3 changes: 2 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Please change once all PR changes are final, so it reads from shankari/e-mission-server
# FROM shankari/e-mission-server:master_2024-02-10--19-38
FROM mukuflash03/e-mission-server:image-push-merge_2024-04-16--49-36
ARG DOCKER_IMAGE_TAG
FROM mukuflash03/e-mission-server:image-push-merge_${DOCKER_IMAGE_TAG}

ENV DASH_DEBUG_MODE True
ENV SERVER_PORT 8050
Expand Down
2 changes: 2 additions & 0 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ services:
build:
context: .
dockerfile: docker/Dockerfile
args:
DOCKER_IMAGE_TAG: ''
image: e-mission/opdash:0.0.1
ports:
- "8050:8050"
Expand Down
2 changes: 2 additions & 0 deletions docker-compose-prod-nginx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ services:
build:
context: .
dockerfile: docker/Dockerfile
args:
DOCKER_IMAGE_TAG: ''
image: e-mission/opdash:0.0.1
environment:
DASH_DEBUG_MODE: "True"
Expand Down
2 changes: 2 additions & 0 deletions docker-compose-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ services:
build:
context: .
dockerfile: docker/Dockerfile
args:
DOCKER_IMAGE_TAG: ''
image: e-mission/opdash:0.0.1
ports:
- "8050:8050"
Expand Down
3 changes: 2 additions & 1 deletion docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Please change once all PR changes are final, so it reads from shankari/e-mission-server
# FROM shankari/e-mission-server:master_2024-02-10--19-38
FROM mukuflash03/e-mission-server:image-push-merge_2024-04-16--49-36
ARG DOCKER_IMAGE_TAG
FROM mukuflash03/e-mission-server:image-push-merge_${DOCKER_IMAGE_TAG}

ENV DASH_DEBUG_MODE True
ENV SERVER_PORT 8050
Expand Down

0 comments on commit cd9682a

Please sign in to comment.