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

chore: initial structure with one image #42

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
159 changes: 159 additions & 0 deletions .github/workflows/push-docker-images.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
name: Build and Publish Docker Images

on:
workflow_dispatch:
inputs:
branch:
description: "Target branch from which the source dockerfile from image will be sourced"

schedule:
- cron: "0 4 * * 1-5" # UTC Time

# Added for testing purposes. Will remove once the PR is finalised
pull_request:
branches:
- '**'

jobs:
push:
runs-on: ubuntu-22.04
continue-on-error: true

strategy:
matrix:
images:
# - image_name: commerce-coordinator
# name: commerce coordinator
# os_platform: linux/arm64
# target: app

# - image_name: course-discovery
# name: course discovery
# os_platform: linux/arm64
# target: dev
# owning_team_email: [email protected]

# - image_name: credentials
# name: credentials
# os_platform: linux/arm64
# target: dev
# owning_team_email: [email protected]
#
# - image_name: ecommerce
# name: ecommerce
# os_platform: linux/arm64
# target: dev

- image_name: edx-analytics-dashboard
name: edx analytics dashboard
os_platform: linux/arm64
target: dev

# - image_name: edx-analytics-data-api
# name: edx analytics data api
# os_platform: linux/arm64
# target: dev
#
# - image_name: edx-exams
# name: edx exams
# os_platform: linux/arm64
# target: app
#
# - dockerfile: edx-platform
# image_name: cms-dev
# name: lms
# os_platform: linux/amd64,linux/arm64
# target: development
# build_args: |
# SERVICE_VARIANT: cms
# SERVICE_PORT: 18010
#
# - dockerfile: edx-platform
# image_name: lms-dev
# name: lms
# os_platform: linux/amd64,linux/arm64
# target: development
# build_args: |
# SERVICE_VARIANT: lms
# SERVICE_PORT: 18000
#
# - image_name: edx-notes-api
# name: edx notes api
# os_platform: linux/arm64
# target: dev

- image_name: enterprise-access
name: enterprise access
os_platform: linux/arm64
target: devstack

# - image_name: enterprise-catalog
# name: enterprise catalog
# os_platform: linux/arm64
# target: legacy_devapp
#
# - image_name: enterprise-subsidy
# name: enterprise subsidy
# os_platform: linux/arm64
# target: devstack
#
# - image_name: program-intent-engagement
# name: program intent engagement
# os_platform: linux/arm64
# target: app
#
# - image_name: registrar
# name: registrar
# os_platform: linux/arm64
# target: dev
#
# - image_name: xqueue
# name: xqueue
# os_platform: linux/arm64
# target: dev

steps:
- name: Get tag name
id: get-tag-name
uses: actions/github-script@v7
with:
script: |
const tagName = "${{ github.event.inputs.branch }}" || 'latest';
console.log('Will use tag: ' + tagName);
return tagName;
result-encoding: string

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Build and push Dev Docker image
uses: docker/build-push-action@v6
with:
file: ./dockerfiles/${{matrix.images.dockerfile || matrix.images.image_name}}.Dockerfile
push: true
platforms: ${{ matrix.images.os_platform }}
target: ${{ matrix.images.target }}
tags: edxops/${{matrix.images.image_name}}-dev:test
# ${{ steps.get-tag-name.outputs.result }}

- name: Send failure notification
if: ${{ failure() && (matrix.images.owning_team_email) }}
uses: dawidd6/action-send-mail@v3
with:
server_address: email-smtp.us-east-1.amazonaws.com
server_port: 465
username: ${{secrets.edx_smtp_username}}
password: ${{secrets.edx_smtp_password}}
subject: Push Image to docker.io/edxops failed in ${{matrix.images.name}}
to: ${{matrix.images.owning_team_email}}
from: github-actions <[email protected]>
body: Push Image to docker.io/edxops for ${{matrix.images.name}} failed! For details see "github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
10 changes: 5 additions & 5 deletions dockerfiles/commerce-coordinator.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:focal as app
FROM ubuntu:focal AS app
MAINTAINER [email protected]


Expand Down Expand Up @@ -37,11 +37,11 @@ RUN rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/bin/python3 /usr/bin/python

RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

ENV DJANGO_SETTINGS_MODULE commerce_coordinator.settings.production
ENV DJANGO_SETTINGS_MODULE=commerce_coordinator.settings.production

EXPOSE 8140

Expand Down
8 changes: 4 additions & 4 deletions dockerfiles/course-discovery.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:focal as app
FROM ubuntu:focal AS app

ARG PYTHON_VERSION=3.12

Expand Down Expand Up @@ -75,7 +75,7 @@ RUN npm install --production && ./node_modules/.bin/bower install --allow-root -
# Expose canonical Discovery port
EXPOSE 8381

FROM app as prod
FROM app AS prod

ENV DJANGO_SETTINGS_MODULE "course_discovery.settings.production"

Expand All @@ -85,7 +85,7 @@ RUN DISCOVERY_CFG=minimal.yml OPENEDX_ATLAS_PULL=true make pull_translations

CMD gunicorn --bind=0.0.0.0:8381 --workers 2 --max-requests=1000 -c course_discovery/docker_gunicorn_configuration.py course_discovery.wsgi:application

FROM app as dev
FROM app AS dev

ENV DJANGO_SETTINGS_MODULE "course_discovery.settings.devstack"

Expand All @@ -101,6 +101,6 @@ CMD while true; do python ./manage.py runserver 0.0.0.0:8381; sleep 2; done

###########################################################
# Define k8s target
FROM prod as kubernetes
FROM prod AS kubernetes
ENV DISCOVERY_SETTINGS='kubernetes'
ENV DJANGO_SETTINGS_MODULE="course_discovery.settings.$DISCOVERY_SETTINGS"
16 changes: 8 additions & 8 deletions dockerfiles/credentials.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:focal as base
FROM ubuntu:focal AS base

# System requirements
# - git; Used to pull in particular requirements from github rather than pypi,
Expand Down Expand Up @@ -35,12 +35,12 @@ ENV PATH="$NODE_ENV/bin:$PATH"
RUN npm install -g [email protected]

RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV DJANGO_SETTINGS_MODULE credentials.settings.production
ENV OPENEDX_ATLAS_PULL true
ENV CREDENTIALS_CFG "minimal.yml"
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8
ENV DJANGO_SETTINGS_MODULE=credentials.settings.production
ENV OPENEDX_ATLAS_PULL=true
ENV CREDENTIALS_CFG="minimal.yml"

EXPOSE 18150
RUN useradd -m --shell /bin/false app
Expand Down Expand Up @@ -94,7 +94,7 @@ CMD gunicorn --workers=2 --name credentials -c /edx/app/credentials/credentials/

# We don't switch back to the app user for devstack because we need devstack users to be
# able to update requirements and generally run things as root.
FROM base as dev
FROM base AS dev
USER root
ENV DJANGO_SETTINGS_MODULE credentials.settings.devstack
RUN pip install -r /edx/app/credentials/credentials/requirements/dev.txt
Expand Down
6 changes: 3 additions & 3 deletions dockerfiles/ecommerce.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ubuntu:focal as app
FROM ubuntu:focal AS app

ENV DEBIAN_FRONTEND noninteractive
# System requirements.
Expand Down Expand Up @@ -55,7 +55,7 @@ RUN npm install --production && ./node_modules/.bin/bower install --allow-root -
# Expose canonical ecommerce port
EXPOSE 18130

FROM app as prod
FROM app AS prod

ENV DJANGO_SETTINGS_MODULE "ecommerce.settings.production"

Expand All @@ -71,7 +71,7 @@ RUN curl -L https://github.com/edx/ecommerce/archive/refs/heads/2u/main.tar.gz |

CMD gunicorn --bind=0.0.0.0:18130 --workers 2 --max-requests=1000 -c ecommerce/docker_gunicorn_configuration.py ecommerce.wsgi:application

FROM app as dev
FROM app AS dev

ENV DJANGO_SETTINGS_MODULE "ecommerce.settings.devstack"

Expand Down
28 changes: 14 additions & 14 deletions dockerfiles/edx-analytics-dashboard.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM ubuntu:focal as app
FROM ubuntu:focal AS app

ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive

ARG PYTHON_VERSION=3.8

Expand Down Expand Up @@ -30,23 +30,23 @@ RUN apt-get update && \
rm -rf /var/lib/apt/lists/*

RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ENV LANG=en_US.UTF-8
ENV LANGUAGE=en_US:en
ENV LC_ALL=en_US.UTF-8

# ENV variables lifetime is bound to the container whereas ARGS variables lifetime is bound to the image building process only
# Also ARGS provide us an option of compatibility of Path structure for Tutor and other OpenedX installations
ARG COMMON_CFG_DIR "/edx/etc"
ARG COMMON_CFG_DIR="/edx/etc"
ARG COMMON_APP_DIR="/edx/app"
ARG INSIGHTS_APP_DIR="${COMMON_APP_DIR}/insights"
ARG INSIGHTS_VENV_DIR="${COMMON_APP_DIR}/insights/venvs/insights"
ARG INSIGHTS_CODE_DIR="${INSIGHTS_APP_DIR}/edx_analytics_dashboard"
ARG INSIGHTS_NODEENV_DIR="${COMMON_APP_DIR}/insights/nodeenvs/insights"

ENV PATH "${INSIGHTS_VENV_DIR}/bin:${INSIGHTS_NODEENV_DIR}/bin:$PATH"
ENV INSIGHTS_APP_DIR ${INSIGHTS_APP_DIR}
ENV THEME_SCSS "sass/themes/open-edx.scss"
ENV PYTHON_VERSION "${PYTHON_VERSION}"
ENV PATH="${INSIGHTS_VENV_DIR}/bin:${INSIGHTS_NODEENV_DIR}/bin:$PATH"
ENV INSIGHTS_APP_DIR=${INSIGHTS_APP_DIR}
ENV THEME_SCSS="sass/themes/open-edx.scss"
ENV PYTHON_VERSION="${PYTHON_VERSION}"

RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION}
RUN pip install virtualenv
Expand Down Expand Up @@ -75,20 +75,20 @@ RUN npm set progress=false && npm ci
EXPOSE 8110
EXPOSE 18110

FROM app as dev
FROM app AS dev

RUN pip install --no-cache-dir -r requirements/local.txt

ENV DJANGO_SETTINGS_MODULE "analytics_dashboard.settings.devstack"
ENV DJANGO_SETTINGS_MODULE="analytics_dashboard.settings.devstack"

# Backwards compatibility with devstack
RUN touch "${INSIGHTS_APP_DIR}/insights_env"

CMD while true; do python ./manage.py runserver 0.0.0.0:8110; sleep 2; done

FROM app as prod
FROM app AS prod

ENV DJANGO_SETTINGS_MODULE "analytics_dashboard.settings.production"
ENV DJANGO_SETTINGS_MODULE="analytics_dashboard.settings.production"

CMD gunicorn \
--pythonpath=/edx/app/insights/edx_analytics_dashboard/analytics_dashboard \
Expand Down
Loading
Loading