build!: Remove Dockerfile and image building workflows (#36006)
These are not maintained by the Open edX community. https://github.com/openedx/public-engineering/issues/263
This commit is contained in:
43
.github/workflows/docker-publish.yml
vendored
43
.github/workflows/docker-publish.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name: Push Docker Images
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
# Push image to GitHub Packages.
|
||||
# See also https://docs.docker.com/docker-hub/builds/
|
||||
push:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.event_name == 'push'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
variant:
|
||||
- "lms_dev"
|
||||
- "cms_dev"
|
||||
- "cms"
|
||||
- "lms"
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- 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 lms/cms base docker images
|
||||
env:
|
||||
DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
|
||||
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
run: make docker_tag_build_push_${{matrix.variant}}
|
||||
43
.github/workflows/publish-ci-docker-image.yml
vendored
43
.github/workflows/publish-ci-docker-image.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name: Push CI Runner Docker Image
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "0 1 * * 3"
|
||||
|
||||
jobs:
|
||||
push:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# This has to happen after checkout in order for gh to work.
|
||||
- name: "Cancel scheduled job on forks"
|
||||
if: github.repository != 'openedx/edx-platform' && github.event_name == 'schedule'
|
||||
env:
|
||||
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||
run: |
|
||||
gh run cancel "${{ github.run_id }}"
|
||||
gh run watch "${{ github.run_id }}"
|
||||
|
||||
- name: Configure AWS Credentials
|
||||
uses: aws-actions/configure-aws-credentials@v4
|
||||
with:
|
||||
aws-access-key-id: ${{ secrets.TOOLS_EDX_ECR_USER_AWS_ACCESS_KEY_ID }}
|
||||
aws-secret-access-key: ${{ secrets.TOOLS_EDX_ECR_USER_AWS_SECRET_ACCESS_KEY }}
|
||||
aws-region: us-east-1
|
||||
|
||||
- name: Log in to ECR
|
||||
id: login-ecr
|
||||
uses: aws-actions/amazon-ecr-login@v2
|
||||
|
||||
- name: Build, tag, and push image to Amazon ECR
|
||||
env:
|
||||
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
|
||||
ECR_REPOSITORY: actions-runner
|
||||
IMAGE_TAG: latest
|
||||
run: |
|
||||
docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -f scripts/ci-runner.Dockerfile .
|
||||
docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
|
||||
200
Dockerfile
200
Dockerfile
@@ -1,200 +0,0 @@
|
||||
FROM ubuntu:focal as minimal-system
|
||||
|
||||
# Warning: This file is experimental.
|
||||
#
|
||||
# Short-term goals:
|
||||
# * Be a suitable replacement for the `edxops/edxapp` image in devstack (in progress).
|
||||
# * Take advantage of Docker caching layers: aim to put commands in order of
|
||||
# increasing cache-busting frequency.
|
||||
# * Related to ^, use no Ansible or Paver.
|
||||
# Long-term goal:
|
||||
# * Be a suitable base for production LMS and CMS images (THIS IS NOT YET THE CASE!).
|
||||
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ARG SERVICE_VARIANT
|
||||
ARG SERVICE_PORT
|
||||
|
||||
# Env vars: paver
|
||||
# We intentionally don't use paver in this Dockerfile, but Devstack may invoke paver commands
|
||||
# during provisioning. Enabling NO_PREREQ_INSTALL tells paver not to re-install Python
|
||||
# requirements for every paver command, potentially saving a lot of developer time.
|
||||
ARG NO_PREREQ_INSTALL='1'
|
||||
|
||||
# Env vars: locale
|
||||
ENV LANG='en_US.UTF-8'
|
||||
ENV LANGUAGE='en_US:en'
|
||||
ENV LC_ALL='en_US.UTF-8'
|
||||
|
||||
# Env vars: configuration
|
||||
ENV CONFIG_ROOT='/edx/etc'
|
||||
ENV LMS_CFG="$CONFIG_ROOT/lms.yml"
|
||||
ENV CMS_CFG="$CONFIG_ROOT/cms.yml"
|
||||
|
||||
# Env vars: path
|
||||
ENV VIRTUAL_ENV="/edx/app/edxapp/venvs/edxapp"
|
||||
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
|
||||
ENV PATH="/edx/app/edxapp/edx-platform/node_modules/.bin:${PATH}"
|
||||
ENV PATH="/edx/app/edxapp/edx-platform/bin:${PATH}"
|
||||
ENV PATH="/edx/app/edxapp/nodeenv/bin:${PATH}"
|
||||
|
||||
WORKDIR /edx/app/edxapp/edx-platform
|
||||
|
||||
# Create user before assigning any directory ownership to it.
|
||||
RUN useradd -m --shell /bin/false app
|
||||
|
||||
# Use debconf to set locales to be generated when the locales apt package is installed later.
|
||||
RUN echo "locales locales/default_environment_locale select en_US.UTF-8" | debconf-set-selections
|
||||
RUN echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" | debconf-set-selections
|
||||
|
||||
# Setting up ppa deadsnakes to get python 3.11
|
||||
RUN apt-get update && \
|
||||
apt-get install -y software-properties-common && \
|
||||
apt-add-repository -y ppa:deadsnakes/ppa
|
||||
|
||||
# Install requirements that are absolutely necessary
|
||||
RUN apt-get update && \
|
||||
apt-get -y dist-upgrade && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
python3-pip \
|
||||
python3.11 \
|
||||
# python3-dev: required for building mysqlclient python package
|
||||
python3.11-dev \
|
||||
python3.11-venv \
|
||||
libpython3.11 \
|
||||
libpython3.11-stdlib \
|
||||
libmysqlclient21 \
|
||||
# libmysqlclient-dev: required for building mysqlclient python package
|
||||
libmysqlclient-dev \
|
||||
pkg-config \
|
||||
libssl1.1 \
|
||||
libxmlsec1-openssl \
|
||||
# lynx: Required by https://github.com/openedx/edx-platform/blob/b489a4ecb122/openedx/core/lib/html_to_text.py#L16
|
||||
lynx \
|
||||
ntp \
|
||||
git \
|
||||
build-essential \
|
||||
gettext \
|
||||
gfortran \
|
||||
graphviz \
|
||||
locales \
|
||||
swig \
|
||||
&& \
|
||||
apt-get clean all && \
|
||||
rm -rf /var/lib/apt/*
|
||||
|
||||
RUN mkdir -p /edx/var/edxapp
|
||||
RUN mkdir -p /edx/etc
|
||||
RUN chown app:app /edx/var/edxapp
|
||||
|
||||
# The builder-production stage is a temporary stage that installs required packages and builds the python virtualenv,
|
||||
# installs nodejs and node_modules.
|
||||
# The built artifacts from this stage are then copied to the base stage.
|
||||
FROM minimal-system as builder-production
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
curl \
|
||||
libssl-dev \
|
||||
libffi-dev \
|
||||
libfreetype6-dev \
|
||||
libgeos-dev \
|
||||
libgraphviz-dev \
|
||||
libjpeg8-dev \
|
||||
liblapack-dev \
|
||||
libpng-dev \
|
||||
libsqlite3-dev \
|
||||
libxml2-dev \
|
||||
libxmlsec1-dev \
|
||||
libxslt1-dev
|
||||
|
||||
# Setup python virtual environment
|
||||
# It is already 'activated' because $VIRTUAL_ENV/bin was put on $PATH
|
||||
RUN python3.11 -m venv "${VIRTUAL_ENV}"
|
||||
|
||||
# Install python requirements
|
||||
# Requires copying over requirements files, but not entire repository
|
||||
COPY requirements requirements
|
||||
RUN pip install -r requirements/pip.txt
|
||||
RUN pip install -r requirements/edx/base.txt
|
||||
|
||||
# Install node and npm
|
||||
RUN nodeenv /edx/app/edxapp/nodeenv --node=20.15.1 --prebuilt
|
||||
RUN npm install -g npm@10.7.x
|
||||
|
||||
# This script is used by an npm post-install hook.
|
||||
# We copy it into the image now so that it will be available when we run `npm install` in the next step.
|
||||
# The script itself will copy certain modules into some uber-legacy parts of edx-platform which still use RequireJS.
|
||||
COPY scripts/copy-node-modules.sh scripts/copy-node-modules.sh
|
||||
|
||||
# Install node modules
|
||||
COPY package.json package.json
|
||||
COPY package-lock.json package-lock.json
|
||||
RUN npm set progress=false && npm ci
|
||||
|
||||
# The builder-development stage is a temporary stage that installs python modules required for development purposes
|
||||
# The built artifacts from this stage are then copied to the development stage.
|
||||
FROM builder-production as builder-development
|
||||
|
||||
RUN pip install -r requirements/edx/development.txt
|
||||
|
||||
# base stage
|
||||
FROM minimal-system as base
|
||||
|
||||
# Copy python virtual environment, nodejs and node_modules
|
||||
COPY --from=builder-production /edx/app/edxapp/venvs/edxapp /edx/app/edxapp/venvs/edxapp
|
||||
COPY --from=builder-production /edx/app/edxapp/nodeenv /edx/app/edxapp/nodeenv
|
||||
COPY --from=builder-production /edx/app/edxapp/edx-platform/node_modules /edx/app/edxapp/edx-platform/node_modules
|
||||
|
||||
# Copy over remaining parts of repository (including all code)
|
||||
COPY . .
|
||||
|
||||
# Install Python requirements again in order to capture local projects
|
||||
RUN pip install -e .
|
||||
|
||||
# Setting edx-platform directory as safe for git commands
|
||||
RUN git config --global --add safe.directory /edx/app/edxapp/edx-platform
|
||||
|
||||
# Production target
|
||||
FROM base as production
|
||||
|
||||
USER app
|
||||
|
||||
ENV EDX_PLATFORM_SETTINGS='docker-production'
|
||||
ENV SERVICE_VARIANT="${SERVICE_VARIANT}"
|
||||
ENV SERVICE_PORT="${SERVICE_PORT}"
|
||||
ENV DJANGO_SETTINGS_MODULE="${SERVICE_VARIANT}.envs.$EDX_PLATFORM_SETTINGS"
|
||||
EXPOSE ${SERVICE_PORT}
|
||||
|
||||
CMD gunicorn \
|
||||
-c /edx/app/edxapp/edx-platform/${SERVICE_VARIANT}/docker_${SERVICE_VARIANT}_gunicorn.py \
|
||||
--name ${SERVICE_VARIANT} \
|
||||
--bind=0.0.0.0:${SERVICE_PORT} \
|
||||
--max-requests=1000 \
|
||||
--access-logfile \
|
||||
- ${SERVICE_VARIANT}.wsgi:application
|
||||
|
||||
# Development target
|
||||
FROM base as development
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get -y install --no-install-recommends \
|
||||
# wget is used in Makefile for common_constraints.txt
|
||||
wget \
|
||||
&& \
|
||||
apt-get clean all && \
|
||||
rm -rf /var/lib/apt/*
|
||||
|
||||
COPY --from=builder-development /edx/app/edxapp/venvs/edxapp /edx/app/edxapp/venvs/edxapp
|
||||
|
||||
RUN ln -s "$(pwd)/lms/envs/devstack-experimental.yml" "$LMS_CFG"
|
||||
RUN ln -s "$(pwd)/cms/envs/devstack-experimental.yml" "$CMS_CFG"
|
||||
# Temporary compatibility hack while devstack is supporting both the old `edxops/edxapp` image and this image.
|
||||
# * Add in a dummy ../edxapp_env file
|
||||
# * devstack sets /edx/etc/studio.yml as CMS_CFG.
|
||||
RUN ln -s "$(pwd)/cms/envs/devstack-experimental.yml" "/edx/etc/studio.yml"
|
||||
RUN touch ../edxapp_env
|
||||
|
||||
ENV EDX_PLATFORM_SETTINGS='devstack_docker'
|
||||
ENV SERVICE_VARIANT="${SERVICE_VARIANT}"
|
||||
EXPOSE ${SERVICE_PORT}
|
||||
CMD ./manage.py ${SERVICE_VARIANT} runserver 0.0.0.0:${SERVICE_PORT}
|
||||
34
Makefile
34
Makefile
@@ -1,8 +1,7 @@
|
||||
# Do things in edx-platform
|
||||
.PHONY: base-requirements check-types clean \
|
||||
compile-requirements detect_changed_source_translations dev-requirements \
|
||||
docker_auth docker_build docker_tag_build_push_lms docker_tag_build_push_lms_dev \
|
||||
docker_tag_build_push_cms docker_tag_build_push_cms_dev docs extract_translations \
|
||||
docs extract_translations \
|
||||
guides help lint-imports local-requirements migrate migrate-lms migrate-cms \
|
||||
pre-requirements pull pull_xblock_translations pull_translations push_translations \
|
||||
requirements shell swagger \
|
||||
@@ -67,9 +66,6 @@ pull_translations: clean_translations ## pull translations via atlas
|
||||
detect_changed_source_translations: ## check if translation files are up-to-date
|
||||
i18n_tool changed
|
||||
|
||||
pull: ## update the Docker image used by "make shell"
|
||||
docker pull edxops/edxapp:latest
|
||||
|
||||
pre-requirements: ## install Python requirements for running pip-tools
|
||||
pip install -r requirements/pip.txt
|
||||
pip install -r requirements/pip-tools.txt
|
||||
@@ -94,13 +90,6 @@ test-requirements: pre-requirements
|
||||
|
||||
requirements: dev-requirements ## install development environment requirements
|
||||
|
||||
shell: ## launch a bash shell in a Docker container with all edx-platform dependencies installed
|
||||
docker run -it -e "NO_PYTHON_UNINSTALL=1" -e "PIP_INDEX_URL=https://pypi.python.org/simple" -e TERM \
|
||||
-v `pwd`:/edx/app/edxapp/edx-platform:cached \
|
||||
-v edxapp_lms_assets:/edx/var/edxapp/staticfiles/ \
|
||||
-v edxapp_node_modules:/edx/app/edxapp/edx-platform/node_modules \
|
||||
edxops/edxapp:latest /edx/app/edxapp/devstack.sh open
|
||||
|
||||
# Order is very important in this list: files must appear after everything they include!
|
||||
REQ_FILES = \
|
||||
requirements/edx/coverage \
|
||||
@@ -164,27 +153,6 @@ upgrade-package: ## update just one package to the latest usable release
|
||||
check-types: ## run static type-checking tests
|
||||
mypy
|
||||
|
||||
docker_auth:
|
||||
echo "$$DOCKERHUB_PASSWORD" | docker login -u "$$DOCKERHUB_USERNAME" --password-stdin
|
||||
|
||||
docker_build: docker_auth
|
||||
DOCKER_BUILDKIT=1 docker build . --build-arg SERVICE_VARIANT=lms --build-arg SERVICE_PORT=8000 --target development -t openedx/lms-dev
|
||||
DOCKER_BUILDKIT=1 docker build . --build-arg SERVICE_VARIANT=lms --build-arg SERVICE_PORT=8000 --target production -t openedx/lms
|
||||
DOCKER_BUILDKIT=1 docker build . --build-arg SERVICE_VARIANT=cms --build-arg SERVICE_PORT=8010 --target development -t openedx/cms-dev
|
||||
DOCKER_BUILDKIT=1 docker build . --build-arg SERVICE_VARIANT=cms --build-arg SERVICE_PORT=8010 --target production -t openedx/cms
|
||||
|
||||
docker_tag_build_push_lms: docker_auth
|
||||
docker buildx build -t openedx/lms:latest -t openedx/lms:${GITHUB_SHA} --platform linux/amd64,linux/arm64 --build-arg SERVICE_VARIANT=lms --build-arg SERVICE_PORT=8000 --target production --push .
|
||||
|
||||
docker_tag_build_push_lms_dev: docker_auth
|
||||
docker buildx build -t openedx/lms-dev:latest -t openedx/lms-dev:${GITHUB_SHA} --platform linux/amd64,linux/arm64 --build-arg SERVICE_VARIANT=lms --build-arg SERVICE_PORT=8000 --target development --push .
|
||||
|
||||
docker_tag_build_push_cms: docker_auth
|
||||
docker buildx build -t openedx/cms:latest -t openedx/cms:${GITHUB_SHA} --platform linux/amd64,linux/arm64 --build-arg SERVICE_VARIANT=cms --build-arg SERVICE_PORT=8010 --target production --push .
|
||||
|
||||
docker_tag_build_push_cms_dev: docker_auth
|
||||
docker buildx build -t openedx/cms-dev:latest -t openedx/cms-dev:${GITHUB_SHA} --platform linux/amd64,linux/arm64 --build-arg SERVICE_VARIANT=cms --build-arg SERVICE_PORT=8010 --target development --push .
|
||||
|
||||
lint-imports:
|
||||
lint-imports
|
||||
|
||||
|
||||
Reference in New Issue
Block a user