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

Faraz/testing ci checks #1

Open
wants to merge 55 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
4af658b
build: add python 3.11 and python 3.12 ci checks
Danyal-Faheem May 3, 2024
075f511
remove tox
Danyal-Faheem May 6, 2024
1cc10cb
build: remove tox
Danyal-Faheem May 6, 2024
05eed2c
build: update dependencies
Danyal-Faheem May 6, 2024
780e5a2
fix: change PYTHON_ENV to PYTHON_ENV_VAR to fix recursion
Danyal-Faheem May 6, 2024
046712d
fix: update makefile
Danyal-Faheem May 6, 2024
e7b8990
fix: update makefile
Danyal-Faheem May 6, 2024
76a3910
fix: update makefile
Danyal-Faheem May 6, 2024
4317ead
fix: update makefile
Danyal-Faheem May 6, 2024
f105096
build: update
Danyal-Faheem May 8, 2024
c6f14d0
add 3.11
Danyal-Faheem May 8, 2024
9ae08e3
add 3.11
Danyal-Faheem May 8, 2024
eae3d37
update tox
Danyal-Faheem May 8, 2024
ce27ada
update virtualenv
Danyal-Faheem May 8, 2024
6b9f238
update virtualenv
Danyal-Faheem May 8, 2024
3fb2ec0
update dockerfile
Danyal-Faheem May 8, 2024
ffd0504
update dockerfile
Danyal-Faheem May 8, 2024
4789b72
fix: remove py38
Danyal-Faheem May 9, 2024
cfdf294
fix: add default-libmysqlclient-dev
Danyal-Faheem May 9, 2024
f66e45c
fix: remove extras in Dockerfile
Danyal-Faheem May 9, 2024
24760f5
fix: add pkg-config
Danyal-Faheem May 9, 2024
a438881
update dockerfile
Danyal-Faheem May 9, 2024
fcafebe
update dockerfile
Danyal-Faheem May 9, 2024
d92cf4d
update dockerfile
Danyal-Faheem May 9, 2024
a4026a6
update dockerfile
Danyal-Faheem May 9, 2024
bc8d43e
update dockerfile
Danyal-Faheem May 9, 2024
79741f3
update dockerfile
Danyal-Faheem May 9, 2024
75b6517
update dockerfile
Danyal-Faheem May 9, 2024
d5d62c6
update dockerfile
Danyal-Faheem May 9, 2024
372b7c2
update dockerfile
Danyal-Faheem May 9, 2024
ea027be
update dockerfile
Danyal-Faheem May 9, 2024
ae2dab2
update dockerfile
Danyal-Faheem May 9, 2024
0648758
fix: replace pip3 with pip
Danyal-Faheem May 13, 2024
455f9dc
fix: remove commitlint
Danyal-Faheem May 13, 2024
f7ec936
fix: remove commitlint
Danyal-Faheem May 13, 2024
e7cd5af
fix: remove commitlint
Danyal-Faheem May 13, 2024
8bd1dd0
fix: pin mysqlcient
Danyal-Faheem May 13, 2024
a58734a
fix: pin mysqlcient
Danyal-Faheem May 13, 2024
4732dd1
fix: remove py38 py312 tox
Danyal-Faheem May 16, 2024
79c83bd
fix: upgrade requirements
Danyal-Faheem May 16, 2024
27df339
echo path in theme_static
Danyal-Faheem May 17, 2024
909d89f
echo path in theme_static
Danyal-Faheem May 17, 2024
2871155
add TOX_ENV in ci
Danyal-Faheem May 21, 2024
4866854
add TOX_ENV in ci
Danyal-Faheem May 21, 2024
3298caf
add TOX_ENV in ci
Danyal-Faheem May 21, 2024
9a92a6f
run for py3.12
Danyal-Faheem May 21, 2024
3aaf1da
remove PYTHON_VERSION
Danyal-Faheem May 21, 2024
f795faf
prepend python_version to tox
Danyal-Faheem May 21, 2024
035f01b
add checks for py311, py38
Danyal-Faheem May 21, 2024
bec83b2
fix: remove extra argument
Danyal-Faheem May 21, 2024
71d470e
fix: pin tox==3.14.6
Danyal-Faheem May 21, 2024
8b70609
build: remove acceptance-python tests
Danyal-Faheem May 21, 2024
14b2e23
revert: requirements upgrade
Danyal-Faheem May 21, 2024
138bc90
fix: revert requirements to master and remove mysqlclient constraint
Danyal-Faheem May 21, 2024
d67084a
test commit
May 22, 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
8 changes: 7 additions & 1 deletion .ci/docker-compose-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,18 @@ services:
db:
image: mysql:5.7
container_name: db
platform: linux/amd64
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci
environment:
MYSQL_ROOT_PASSWORD: "password"
MYSQL_DATABASE: "ecommerce"
ecommerce:
image: edxops/ecommerce:latest
platform: linux/amd64
build:
context: ../.
target: dev
args:
PYTHON_VERSION: $PYTHON_VERSION
container_name: ecommerce_testing
volumes:
- ..:/edx/app/ecommerce/ecommerce
Expand Down
62 changes: 33 additions & 29 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,61 +11,65 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- django-env: django32
testname: quality-and-jobs
targets: PYTHON_ENV=py38 requirements.js check_translations_up_to_date validate_translations clean_static static quality validate_js check_keywords
- django-env: django32
testname: test-python
targets: PYTHON_ENV=py38 requirements.js clean_static static validate_python
- django-env: django32
testname: acceptance-python
targets: PYTHON_ENV=py38 requirements.js clean_static static acceptance

python-version: ['py38', 'py311', 'py312']
django-env: ['django32']
test: ['quality-and-jobs', 'test-python']
steps:
- uses: actions/checkout@v2
- name: Setup and Format Python Version
id: format_python_version
shell: bash
run: |
# Remove 'py' and insert a dot to format the version
FORMATTED_VERSION=${{ matrix.python-version }} # e.g., py38
FORMATTED_VERSION=${FORMATTED_VERSION/py3/3.} # becomes 3.8
# Set environment variables
echo "PYTHON_VERSION=$FORMATTED_VERSION" >> $GITHUB_ENV
- name: Start container
run: |
docker-compose -f ./.ci/docker-compose-ci.yml up -d
PYTHON_VERSION=$PYTHON_VERSION docker compose -f ./.ci/docker-compose-ci.yml up -d
- name: Install dependencies
run: |
docker exec -t ecommerce_testing bash -c "
cd /edx/app/ecommerce/ecommerce/ &&
python3 -m pip install tox
python$PYTHON_VERSION -m pip install tox
"
- name: Run tests
run: |
docker exec -t -e CI=1 ecommerce_testing bash -c "
cd /edx/app/ecommerce/ecommerce/ &&
PATH=\$PATH:/edx/app/ecommerce/nodeenvs/ecommerce/bin:/snap/bin
DJANGO_ENV=${{ matrix.django-env }} make ${{ matrix.targets }}
DJANGO_ENV=${{ matrix.django-env }} PYTHON_ENV=${{ matrix.python-version }} PYTHON_VERSION=$PYTHON_VERSION make ${{ matrix.test }}
"
- name: Run coverage
if: matrix.testname == 'test-python'
if: matrix.test == 'test-python'
run: |
docker exec ecommerce_testing /edx/app/ecommerce/ecommerce/.ci/run_coverage.sh
- name: Setup Python
if: matrix.testname == 'test-python'
if: matrix.test == 'test-python' && matrix.python-version == 'py38'
uses: actions/setup-python@v2
with:
python-version: "3.8"
architecture: x64
- name: Report coverage
if: matrix.testname == 'test-python'
if: matrix.test == 'test-python' && matrix.python-version == 'py38'
uses: codecov/codecov-action@v3
with:
flags: unittests
fail_ci_if_error: false

docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: "3.8"
architecture: x64
- name: Install Dependencies
run: pip install -r requirements/docs.txt -r requirements/tox.txt
- name: Build the docs
run: make docs
# docs:
# runs-on: ubuntu-latest
# strategy:
# matrix:
# python-version: ['3.8', '3.11', '3.12']
# steps:
# - uses: actions/checkout@v2
# - uses: actions/setup-python@v2
# with:
# python-version: ${{matrix.python-version}}
# architecture: x64
# - name: Install Dependencies
# run: pip install -r requirements/docs.txt -r requirements/tox.txt
# - name: Build the docs
# run: make docs
10 changes: 0 additions & 10 deletions .github/workflows/commitlint.yml

This file was deleted.

Empty file added =3.2,
Empty file.
17 changes: 13 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,18 +1,23 @@
FROM ubuntu:focal as app

# Define 3.12 as default but it changes to the PYTHON_VERSION passed as argument
ARG PYTHON_VERSION=3.12

ENV DEBIAN_FRONTEND noninteractive
# System requirements.
RUN apt update && \
apt-get install -y software-properties-common && \
apt-add-repository -y ppa:deadsnakes/ppa && \
apt-get install -qy \
curl \
gettext \
git \
language-pack-en \
build-essential \
python3.8-dev \
python3-virtualenv \
python3.8-distutils \
python${PYTHON_VERSION}-dev \
python${PYTHON_VERSION}-distutils \
libmysqlclient-dev \
pkg-config \
libssl-dev \
libcairo2-dev && \
rm -rf /var/lib/apt/lists/*
Expand All @@ -34,11 +39,15 @@ ARG ECOMMERCE_NODEENV_DIR="${ECOMMERCE_APP_DIR}/nodeenvs/${SERVICE_NAME}"
ENV ECOMMERCE_CFG "${COMMON_CFG_DIR}/ecommerce.yml"
ENV ECOMMERCE_CODE_DIR "${ECOMMERCE_CODE_DIR}"
ENV ECOMMERCE_APP_DIR "${ECOMMERCE_APP_DIR}"
ENV PYTHON_VERSION "${PYTHON_VERSION}"

RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python${PYTHON_VERSION}
RUN pip install virtualenv

# Add virtual env and node env to PATH, in order to activate them
ENV PATH "${ECOMMERCE_VENV_DIR}/bin:${ECOMMERCE_NODEENV_DIR}/bin:$PATH"

RUN virtualenv -p python3.8 --always-copy ${ECOMMERCE_VENV_DIR}
RUN virtualenv -p python${PYTHON_VERSION} --always-copy ${ECOMMERCE_VENV_DIR}

RUN pip install nodeenv

Expand Down
59 changes: 33 additions & 26 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
NODE_BIN=./node_modules/.bin
DIFF_COVER_BASE_BRANCH=master
PYTHON_ENV=py38
PYTHON_ENV_VAR=$(if $(PYTHON_ENV),$(PYTHON_ENV),py312)
DJANGO_ENV_VAR=$(if $(DJANGO_ENV),$(DJANGO_ENV),django32)
PYTHON_VERSION_VAR=$(if $(PYTHON_VERSION),$(PYTHON_VERSION),3.12)

help:
@echo ''
Expand Down Expand Up @@ -41,21 +42,21 @@ requirements.js:
$(NODE_BIN)/bower install --allow-root

requirements: requirements.js
pip3 install -r requirements/pip_tools.txt
pip3 install -r requirements/dev.txt --exists-action w
pip install -r requirements/pip_tools.txt
pip install -r requirements/dev.txt --exists-action w

requirements.tox:
pip3 install -U pip==20.0.2
pip3 install -r requirements/tox.txt --exists-action w
pip install -U pip
pip install -r requirements/tox.txt --exists-action w

production-requirements: requirements.js
pip3 install -r requirements.txt --exists-action w
pip install -r requirements.txt --exists-action w

migrate: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-migrate
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-migrate

serve: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-serve
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-serve

clean:
find . -name '*.pyc' -delete
Expand All @@ -65,18 +66,18 @@ clean_static:
rm -rf assets/* ecommerce/static/build/*

run_check_isort: requirements.tox
tox -e $(PYTHON_ENV)-check_isort
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-check_isort

run_isort: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-run_isort
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-run_isort

run_pycodestyle: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-pycodestyle
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-pycodestyle

run_pep8: run_pycodestyle

run_pylint: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-pylint
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-pylint

quality: run_check_isort run_pycodestyle run_pylint

Expand All @@ -86,42 +87,42 @@ validate_js:
$(NODE_BIN)/gulp lint

validate_python: clean requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-tests
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-tests

acceptance: clean requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-acceptance
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-acceptance

fast_validate_python: clean requirements.tox
DISABLE_ACCEPTANCE_TESTS=True tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-tests
DISABLE_ACCEPTANCE_TESTS=True python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-tests

validate: validate_python validate_js quality

theme_static: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-theme_static
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-theme_static

static: requirements.js theme_static requirements.tox
$(NODE_BIN)/r.js -o build.js
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-static
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-static

html_coverage: requirements.tox
tox -e $(PYTHON_ENV)-coverage_html
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-coverage_html

diff_coverage: validate fast_diff_coverage

fast_diff_coverage: requirements.tox
tox -e $(PYTHON_ENV)-fast_diff_coverage
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-fast_diff_coverage

e2e: requirements.tox
tox -e $(PYTHON_ENV)-e2e
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-e2e

extract_translations: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-extract_translations
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-extract_translations

dummy_translations: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-dummy_translations
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-dummy_translations

compile_translations: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-compile_translations
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-compile_translations

fake_translations: extract_translations dummy_translations compile_translations

Expand All @@ -134,18 +135,18 @@ update_translations: pull_translations fake_translations

# extract_translations should be called before this command can detect changes
detect_changed_source_translations: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-detect_changed_translations
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-detect_changed_translations

# @FIXME: skip detect_changed_source_translations until git diff works again (REV-2737)
check_translations_up_to_date: fake_translations # detect_changed_source_translations

# Validate translations
validate_translations: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-validate_translations
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-validate_translations

# Scan the Django models in all installed apps in this project for restricted field names
check_keywords: requirements.tox
tox -e $(PYTHON_ENV)-${DJANGO_ENV_VAR}-check_keywords
python$(PYTHON_VERSION_VAR) -m tox -e $(PYTHON_ENV_VAR)-${DJANGO_ENV_VAR}-check_keywords

COMMON_CONSTRAINTS_TXT=requirements/common_constraints.txt
.PHONY: $(COMMON_CONSTRAINTS_TXT)
Expand Down Expand Up @@ -173,6 +174,12 @@ upgrade: $(COMMON_CONSTRAINTS_TXT)
docs:
tox -e docs

quality-and-jobs: requirements.js check_translations_up_to_date validate_translations clean_static static quality validate_js check_keywords

test-python: requirements.js clean_static static validate_python

acceptance-python: requirements.js clean_static static acceptance

# Targets in a Makefile which do not produce an output file with the same name as the target name
.PHONY: help requirements migrate serve clean validate_python quality validate_js validate html_coverage e2e \
extract_translations dummy_translations compile_translations fake_translations pull_translations \
Expand Down
Loading
Loading