diff --git a/.env b/.env index 00657df..677f27f 100644 --- a/.env +++ b/.env @@ -1,6 +1,6 @@ PYTHON_IMPLEMENTATION=python PYTHON_VERSION=3.12 -MARIADB_VERSION=10.6 +MARIADB_VERSION=10.11 MYSQL_VERSION=8.0 ORACLE_VERSION=23.5.0.0 POSTGRESQL_VERSION=14 diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..04e7f95 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,143 @@ +--- +name: Publish Docker images for Django Docker Box + +on: # yamllint disable-line rule:truthy + push: + branches: [pkgs] + +env: + REGISTRY: ghcr.io + REGISTRY_WITH_PATH: ghcr.io/${{ github.repository_owner }} + +jobs: + build-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + strategy: + matrix: + python_implementation: [python] + python_version: ["3.12", "3.13"] + django_version: ["4.2", "5.1", "5.2", "main"] + exclude: + # Exclude PyPy versions that are not available + - python_implementation: pypy + python_version: "3.12" + - python_implementation: pypy + python_version: "3.13" + env: + # yamllint disable rule:line-length + DOCKER_IMAGE_TAG: ${{ matrix.python_implementation }}-${{ matrix.python_version }}-django-${{ matrix.django_version }} + # yamllint enable rule:line-length + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY_WITH_PATH }}/django-docker-box + tags: | + type=raw,value=${{ env.DOCKER_IMAGE_TAG }} + - name: Download Django source + # yamllint disable rule:line-length + run: | + if [ "${{ matrix.django_version }}" = "main" ]; then + branch=main + dirname=django-main + else + branch=stable/${{ matrix.django_version }}.x + dirname=django-stable-${{ matrix.django_version }}.x + fi + curl -L https://github.com/django/django/archive/refs/heads/$branch.tar.gz | tar xz + mv $dirname django-src + # yamllint enable rule:line-length + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: Containerfile + push: ${{ github.event_name != 'pull_request' }} + build-args: | + PYTHON_IMPLEMENTATION=${{ matrix.python_implementation }} + PYTHON_VERSION=${{ matrix.python_version }} + DJANGO_PATH=django-src + build-contexts: | + src=django-src + # yamllint disable rule:line-length + cache-from: type=registry,ref=${{ env.REGISTRY_WITH_PATH }}/django-docker-box:buildcache-${{ env.DOCKER_IMAGE_TAG }} + cache-to: type=registry,ref=${{ env.REGISTRY_WITH_PATH }}/django-docker-box:buildcache-${{ env.DOCKER_IMAGE_TAG }},mode=max + # yamllint enable rule:line-length + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + test-image: + needs: build-push-image + runs-on: ubuntu-latest + strategy: + matrix: + python_implementation: [python] + python_version: ["3.12", "3.13"] + django_version: ["5.2", "main"] + test_service: + - mariadb + - mysql + - oracle + - postgresql + - sqlite + - mariadb-gis + - mysql-gis + - oracle-gis + - postgresql-gis + - sqlite-gis + fail-fast: false + env: + REGISTRY: ghcr.io + REGISTRY_PATH: ghcr.io/${{ github.repository_owner }}/django-docker-box + # yamllint disable rule:line-length + IMAGE_TAG: ${{ matrix.python_implementation }}-${{ matrix.python_version }}-django-${{ matrix.django_version }} + # yamllint enable rule:line-length + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + ref: ${{ github.event.workflow_run.head_sha }} + - name: Log into registry ${{ env.REGISTRY }} + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Pull image + run: | + docker pull ${{ env.REGISTRY_PATH }}:${{ env.IMAGE_TAG }} + # yamllint disable rule:line-length + - name: Download Django source + run: | + if [ "${{ matrix.django_version }}" = "main" ]; then + branch=main + dirname=django-main + else + branch=stable/${{ matrix.django_version }}.x + dirname=django-stable-${{ matrix.django_version }}.x + fi + curl -L https://github.com/django/django/archive/refs/heads/$branch.tar.gz | tar xz + mv $dirname django-src + # yamllint enable rule:line-length + - name: Run tests for ${{ matrix.test_service }} + run: | + export DOCKER_BOX_IMAGE=${{ env.REGISTRY_PATH }}:${{ env.IMAGE_TAG }} + export DJANGO_PATH=./django-src/ + docker compose run --rm ${{ matrix.test_service }} diff --git a/Containerfile b/Containerfile index 8c5be34..ebaa615 100644 --- a/Containerfile +++ b/Containerfile @@ -19,9 +19,9 @@ ENV DEBIAN_FRONTEND=noninteractive ENV PYTHONUNBUFFERED=1 # Force colored output for various tooling in CI. -ENV COLUMNS=120 -ENV FORCE_COLOR=1 -ENV TERM="xterm-256color" +# ENV COLUMNS=120 +# ENV FORCE_COLOR=1 +# ENV TERM="xterm-256color" # Create user and prepare directories. RUN <