Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redesign Build Deployment Process (External) #125

Open
wants to merge 62 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
6aed57a
Create image_build_push.yml
MukuFlash03 Mar 18, 2024
8b0317f
Added docker build and push for dashboard and notebook images + Updat…
Mar 22, 2024
7d3cd86
Merge pull request #2 from MukuFlash03/image-push
MukuFlash03 Mar 22, 2024
355db20
Changed sed to jq + Renamed docker image in image_push
Mar 26, 2024
3c17d18
Merge pull request #3 from MukuFlash03/image-push
MukuFlash03 Mar 26, 2024
e402a61
Added TODO to change image push branch
Mar 26, 2024
ffcdbc8
Merge pull request #4 from MukuFlash03/image-push
MukuFlash03 Mar 26, 2024
d6a6809
Removed printing Docker username
Mar 26, 2024
102899a
Merge pull request #5 from MukuFlash03/image-push
MukuFlash03 Mar 26, 2024
50a7b63
Added cert.sh + Modified Dockerfiles
Mar 28, 2024
db85f75
Merge pull request #6 from MukuFlash03/image-push
MukuFlash03 Mar 28, 2024
2dab7a1
Removing ENV variables from Dockerfile
Apr 3, 2024
43f3d5a
Merge pull request #7 from MukuFlash03/image-push
MukuFlash03 Apr 3, 2024
89ed59a
Removed sed / jq usage from start scripts
Apr 12, 2024
37c7599
Merge pull request #8 from MukuFlash03/image-push
MukuFlash03 Apr 12, 2024
e962d13
Changing base image to build from redesign server image
Apr 12, 2024
8d2464d
Bumped up base server image tag
Apr 16, 2024
d49a275
Merge branch 'image-push-merge' into image-push
MukuFlash03 Apr 16, 2024
efaf216
Merge pull request #9 from MukuFlash03/image-push
MukuFlash03 Apr 16, 2024
baac678
Bump up base server image tag
Apr 16, 2024
629b3a1
Merge pull request #10 from MukuFlash03/image-push
MukuFlash03 Apr 16, 2024
fee9437
Artifact download test - 1
Apr 26, 2024
9622279
Bumped up server image tag
Apr 30, 2024
6e3f2be
Artifact + Matrix - 1
May 2, 2024
1745634
Artifact + Matrix - 2
May 2, 2024
21ca992
Artifact + Matrix - 3
May 2, 2024
58093d3
Artifact + Matrix - 4
May 2, 2024
368900b
Artifact + Matrix - 5
May 3, 2024
bf3e9f7
Updated docker image tag in .env to the latest timestamp:
actions-user May 3, 2024
6eebf87
Updated docker image tag in .env to the latest timestamp: 2024-05-03-…
actions-user May 3, 2024
e760598
Added TODOs in github actions workflow YAML file
May 3, 2024
9444e60
Artifact + Matrix - 6
May 3, 2024
40beb80
Updated docker image tag in .env file to the latest timestamp
actions-user May 3, 2024
29ebf49
Updated docker image tag in .env file to the latest timestamp
actions-user May 3, 2024
1d0a937
Merge branch 'main' into image-push
nataliejschultz May 3, 2024
308eca0
Updated docker image tag in .env file to the latest timestamp
actions-user May 6, 2024
35e09cb
Merge branch 'image-push' into tags-combo-approach
nataliejschultz May 8, 2024
d919a34
Updated docker image tag in .env file to the latest timestamp
actions-user May 8, 2024
11cdafb
Cleanup image_build_push.yml
nataliejschultz May 8, 2024
1dda106
Polishing image_build_push.yml
nataliejschultz May 8, 2024
66bd0a6
Polishing fetch_runID.py
nataliejschultz May 8, 2024
426ae50
Merge branch 'image-push' into tags-combo-approach
nataliejschultz May 8, 2024
3b298fc
Merge pull request #11 from MukuFlash03/tags-combo-approach
nataliejschultz May 8, 2024
4335f39
Cert copy
nataliejschultz May 8, 2024
b330f96
Delete viz_scripts/docker/cert.sh
nataliejschultz May 8, 2024
9b1dca5
Merge branch 'main' into image-push
nataliejschultz May 8, 2024
ab0e157
Update docker-compose.yml
nataliejschultz May 21, 2024
7c78c18
Replacing docker build in image_build_push.yml with docker compose
nataliejschultz May 23, 2024
27c2f42
Delete .env
nataliejschultz May 23, 2024
c8b6dca
Remove whitespace changes to docker-compose.dev.yml
nataliejschultz May 23, 2024
40bf355
Removing redundant pip install
nataliejschultz May 23, 2024
803e9c2
Updating tag name
nataliejschultz May 23, 2024
7ee8e61
Adding artifact upload
nataliejschultz May 24, 2024
af3c2d3
Removing DB_HOST fallback in start_notebook.sh
nataliejschultz May 24, 2024
91d5251
DOCKER_IMAGE_TAG --> SERVER_IMAGE_TAG rename
nataliejschultz May 24, 2024
d3bf89f
Testing workflow
nataliejschultz May 26, 2024
c58b5dd
Testing workflow (again)
nataliejschultz May 26, 2024
14775b5
Push test + adding rename step
nataliejschultz May 26, 2024
f595b0d
dash to dot
nataliejschultz May 26, 2024
2f17e5d
change FROM context
nataliejschultz May 26, 2024
25dcba1
Reverting changes made to test
nataliejschultz May 26, 2024
82cf4e9
Switching to build prod instead of dev
nataliejschultz May 28, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/fetch_runID.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@

import json
import logging
import requests
import sys

if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)

'''
Workflow "docker image" uses image_build_push.yml
From above commented out code, and checked via terminal as well,
workflow id for the "docker image" can be fetched using:
https://api.github.com/repos/MukuFlash03/e-mission-server/actions/workflows
https://api.github.com/repos/e-mission/e-mission-server/actions/workflows

For MukuFlash03: id = 75506902
For e-mission-server: id = 35580278
'''

download_url = "https://api.github.com/repos/e-mission/e-mission-server/actions/workflows/35580278/runs"
logging.debug("About to fetch workflow runs present in docker image workflow present in e-mission-server from %s" % download_url)
r = requests.get(download_url)
if r.status_code != 200:
logging.debug(f"Unable to fetch workflow runs, status code: {r.status_code}")
sys.exit(1)
else:
workflow_runs_json = json.loads(r.text)
logging.debug(f"Successfully fetched workflow runs")

workflow_runs = workflow_runs_json["workflow_runs"]
if workflow_runs:
successful_runs = [run for run in workflow_runs \
if run["status"] == "completed" and \
run["conclusion"] == "success" and \
run["head_branch"] == "master"
]
if successful_runs:
sorted_runs = successful_runs.sort(reverse=True, key=lambda x: x["updated_at"])
sorted_runs = sorted(successful_runs, reverse=True, key=lambda x: x["updated_at"])
latest_run_id = sorted_runs[0]["id"]
print(f"::set-output name=run_id::{latest_run_id}")
158 changes: 158 additions & 0 deletions .github/workflows/image_build_push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
name: docker-image-push-public-dash

on:
push:
branches: [ main ]

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:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}

jobs:
fetch_run_id:
runs-on: ubuntu-latest

outputs:
run_id: ${{ steps.get_run_id.outputs.run_id }}

steps:
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'

- name: Install Python dependencies
run: |
pip install requests

- name: Run Python script
id: run_script
run: |
echo "Fetching latest successful run ID from e-misison-server docker image workflow"
python .github/fetch_runID.py

- name: Get Run ID
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.docker_image_tag }}

steps:
- uses: actions/checkout@v4
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit, future fix: why are we checking this out twice?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on this, each job will need its own checkout/environment


- 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:
# TODO: Create a token with basic repo permissions
name: docker-image-tag
github-token: ${{ secrets.GH_PAT_TAG }}
repository: e-mission/e-mission-server
run-id: ${{ env.RUN_ID }}

- name: Print artifact tag
id: get_docker_tag
run: |
cat tag_file.txt
docker_image_tag=$(cat tag_file.txt)
echo $docker_image_tag
echo "docker_image_tag=$(echo $docker_image_tag)" >> $GITHUB_OUTPUT
build:
needs: fetch_tag

runs-on: ubuntu-latest

env:
DOCKER_IMAGE_TAG_1: ${{ needs.fetch_tag.outputs.docker_image_tag }}
DOCKER_IMAGE_TAG_2: ${{ github.event.inputs.docker_image_tag }}
Comment on lines +84 to +85
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit, future fix: better names

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clarification: Better names for the environment variables?


steps:
- uses: actions/checkout@v4

- name: Print input docker image tag
run: |
echo "Event name: ${{ github.event_name }}"
echo "Latest docker image tag (push): ${{ env.DOCKER_IMAGE_TAG_1 }}"
echo "Latest docker image tag (workflow_dispatch): ${{ env.DOCKER_IMAGE_TAG_2 }}"

- name: Update .env file
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Workflow_dispatch: New server image built and pushed, Updating image tag in .env"
echo "SERVER_IMAGE_TAG=$DOCKER_IMAGE_TAG_2" > .env
else
echo "Push event: Restoring latest server image tag in .env"
echo "SERVER_IMAGE_TAG=$DOCKER_IMAGE_TAG_1" > .env
fi

- name: Add, Commit, Push changes to .env file
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
Comment on lines +108 to +109
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit, future fix: configure this to be more meaningful; "GitHub Action" doing what?

if git diff --quiet; then
echo "Latest timestamp already present in .env file, no changes to commit"
else
git add .env
git commit -m "Updated docker image tag in .env file to the latest timestamp"
git push origin
fi

- name: docker login
run: | # log into docker hub account
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD

- name: Get current date # get the date of the build
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d--%M-%S')"

- name: Run a one-line script
run: echo running in repo ${GITHUB_REPOSITORY#*/} branch ${GITHUB_REF##*/} on ${{ steps.date.outputs.date }}

- name: build docker image
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
SERVER_IMAGE_TAG=$DOCKER_IMAGE_TAG_2 docker compose -f docker-compose.prod.yml build
else
SERVER_IMAGE_TAG=$DOCKER_IMAGE_TAG_1 docker compose -f docker-compose.prod.yml build
fi
docker images

- name: rename docker images
run: |
docker image tag em-pub-dash-prod/frontend:latest $DOCKER_USER/${GITHUB_REPOSITORY#*/}:${GITHUB_REF##*/}_${{ steps.date.outputs.date }}
docker image tag em-pub-dash-prod/viz-scripts:latest $DOCKER_USER/${GITHUB_REPOSITORY#*/}_notebook:${GITHUB_REF##*/}_${{ steps.date.outputs.date }}

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

- name: Create a text file
run: |
echo ${{ steps.date.outputs.date }} > public_dash_tag_file.txt
echo "Created tag text file"

- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: public-dash-image-tag
path: public_dash_tag_file.txt
overwrite: true
1 change: 0 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,6 @@ celerybeat.pid
*.sage.py

# Environments
.env
.venv
env/
venv/
Expand Down
6 changes: 4 additions & 2 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ services:
notebook-server:
image: em-pub-dash-dev/viz-scripts
build:
context: viz_scripts
dockerfile: docker/Dockerfile.dev
context: viz_scripts
dockerfile: docker/Dockerfile.dev
args:
SERVER_IMAGE_TAG: ${SERVER_IMAGE_TAG}
depends_on:
- db
environment:
Expand Down
6 changes: 5 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ services:
- emission
notebook-server:
image: em-pub-dash-prod/viz-scripts
build: viz_scripts
build:
context: viz_scripts
dockerfile: Dockerfile
args:
SERVER_IMAGE_TAG: ${SERVER_IMAGE_TAG}
depends_on:
- db
environment:
Expand Down
7 changes: 6 additions & 1 deletion viz_scripts/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# python 3
FROM shankari/e-mission-server:master_2024-05-06--36-33

ARG SERVER_IMAGE_TAG
FROM shankari/e-mission-server:master_${SERVER_IMAGE_TAG}

ADD https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem /etc/ssl/certs/


VOLUME /plots

Expand Down
4 changes: 3 additions & 1 deletion viz_scripts/docker/Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# python 3
FROM shankari/e-mission-server:master_2024-05-06--36-33

ARG SERVER_IMAGE_TAG
FROM shankari/e-mission-server:master_${SERVER_IMAGE_TAG}

VOLUME /plots

Expand Down
7 changes: 0 additions & 7 deletions viz_scripts/docker/start_notebook.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
#!/usr/bin/env bash
#Configure web server

#set database URL using environment variable
echo "DB host = "${DB_HOST}
if [ -z ${DB_HOST} ] ; then
local_host=`hostname -i`
sed "s-localhost-${local_host}_" conf/storage/db.conf.sample > conf/storage/db.conf
else
sed "s-localhost-${DB_HOST}-" conf/storage/db.conf.sample > conf/storage/db.conf
fi

### configure the saved-notebooks directory for persistent notebooks

Expand Down