Skip to content

Commit

Permalink
First cut to moodle-php-apache multiarch builder
Browse files Browse the repository at this point in the history
First attempt to switch the automated building of moodle-php-apache
images from DockerHub to GHA. Main reason being that the former doesn't
support multiarch builds (only multiarch storage).

Link: docker/hub-feedback#1874

Experimentally we'll be, also, sending the images to both DockerHub
and GitHub registries in case we need to switch some day.

This requires:

1. Some secrets to be created or used:
  - DOCKERHUB_USERNAME (to create)
  - DOCKERHUB_TOKEN (to create)
  - DOCKERHUB_PASSWORD (to create, grrr, descriptions cannot be updated
    using PATs, see peter-evans/dockerhub-description#10
  - GH_USERNAME (to create)
  - GITHUB_TOKEN (to use)
2. Autobuilds @ DockerHub to be disabled (this takes exactly on them)
  • Loading branch information
stronk7 committed Aug 14, 2021
1 parent 0c2f2c7 commit 3954ec8
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 7 deletions.
77 changes: 77 additions & 0 deletions .github/workflows/buildx_and_publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Docker multiarch publish

on: push

env:
REPOSITORY: moodle-php-apache
DOCKERHUB_OWNER: moodlehq
GH_OWNER: moodlehq

jobs:
Build:
# Completely avoid forks to try this workflow.
if: github.repository_owner == 'moodlehq'
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

# Calculate the tags to be pussed to the registries.
- name: Calculate image tag names
id: calculatetags
uses: docker/metadata-action@v3
with:
images: |
${{ env.DOCKERHUB_OWNER }}/${{ env.REPOSITORY }}
ghcr.io/${{ env.GH_OWNER }}/${{ env.REPOSITORY }}
flavor: |
latest=false
tags: |
type=raw,value=dev
# https://github.com/docker/setup-qemu-action#usage
- name: Set up QEMU
uses: docker/setup-qemu-action@v1

# https://github.com/marketplace/actions/docker-setup-buildx
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1

# https://github.com/docker/login-action#docker-hub
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

# https://github.com/docker/login-action#github-container-registry
- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.GITHUB_TOKEN }}

# https://github.com/docker/build-push-action#multi-platform-image
- name: Build and push to Docker Hub and Github registries
uses: docker/build-push-action@v2
with:
context: .
file: Dockerfile
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.calculatetags.outputs.tags }}

# https://github.com/peter-evans/dockerhub-description
# It's horrible that we need to use password here instead of PAT, because
# that's only available via CLI what defeats 2FA. Anyway, we need to
# auto-update de description, so using it (till available via PAT).
# Link: https://github.com/peter-evans/dockerhub-description/issues/10
# Note that we only update the description with the master branch version.
- name: Set Docker Hub description from README.md
if: github.ref == 'refs/heads/master'
uses: peter-evans/dockerhub-description@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
repository: ${{ env.DOCKERHUB_OWNER }}/${{ env.REPOSITORY }}
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,31 @@ A Moodle PHP environment configured for Moodle development based on [Official PH
| PHP 7.0 | Jessie | 7.0-jessie | [![Build Status](https://travis-ci.com/moodlehq/moodle-php-apache.svg?branch=7.0-jessie)](https://travis-ci.com/moodlehq/moodle-php-apache)|Jessie and PHP 7.0 EOL|
| PHP 5.6 | Jessie | 5.6-jessie | [![Build Status](https://travis-ci.com/moodlehq/moodle-php-apache.svg?branch=5.6-jessie)](https://travis-ci.com/moodlehq/moodle-php-apache)|Jessie and PHP 5.6 EOL|

# Example usage
## Example usage
The following command will expose the current working directory on port 8080:
```bash
$ docker run --name web0 -p 8080:80 -v $PWD:/var/www/html moodlehq/moodle-php-apache:7.1
```

# Features

## Features
* Preconfigured with all php extensions required for Moodle development and all database drivers
* Serves wwroot configured at /var/www/html/
* Verified by [automated tests](https://travis-ci.com/moodlehq/moodle-php-apache)

# Directories
* For PHP 7.3 and up, both `linux/amd64` and `linux/arm64` images are being built. Note that `linux/arm64` doesn't support the sqlsrv and oci extensions yet. Other than that, both architectures work exactly the same.
* Verified by [automated tests](https://travis-ci.com/moodlehq/moodle-php-apache).
* Autobuilt from GHA, on push.

## Directories
To faciliate testing and easy setup the following directories are created and owned by www-data by default:

* `/var/www/moodledata`
* `/var/www/phpunitdata`
* `/var/www/behatdata`
* `/var/www/behatfaildumps`


# See also
## See also
This container is part of a set of containers for Moodle development, see also:

* [moodle-docker](https://github.com/moodlehq/moodle-docker) a docker-composer based set of tools to get Moodle development running with zero configuration
* [moodle-db-mssql](https://github.com/moodlehq/moodle-db-mssql) Microsoft SQL Server for Linux configured for Moodle development
* [moodle-db-oracle](https://github.com/moodlehq/moodle-db-oracle) Oracle XE configured for Moodle development

0 comments on commit 3954ec8

Please sign in to comment.