mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-05-05 20:26:49 +02:00
- Add mysql2 ^3.22.0 to src/package.json dependencies - Update pnpm-lock.yaml with mysql2 3.22.1 - Add build-test-mysql CI job to docker.yml as regression test ueberdb2@5.0.45 has mysql2 as an optional peer dependency, but it was not installed in the Docker image. This caused "Cannot find module 'mysql2'" errors when Etherpad was configured to use MySQL. Agent-Logs-Url: https://github.com/ether/etherpad/sessions/5aeca427-fdbb-4502-be3f-45ee62e12da9 Co-authored-by: JohnMcLear <220864+JohnMcLear@users.noreply.github.com>
236 lines
7.0 KiB
YAML
236 lines
7.0 KiB
YAML
name: "Docker"
|
|
on:
|
|
pull_request:
|
|
paths-ignore:
|
|
- 'doc/**'
|
|
push:
|
|
branches:
|
|
- 'develop'
|
|
paths-ignore:
|
|
- 'doc/**'
|
|
tags:
|
|
- 'v?[0-9]+.[0-9]+.[0-9]+'
|
|
env:
|
|
TEST_TAG: etherpad/etherpad:test
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build-test:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
env:
|
|
PNPM_HOME: ~/.pnpm-store
|
|
steps:
|
|
-
|
|
name: Check out
|
|
uses: actions/checkout@v6
|
|
with:
|
|
path: etherpad
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v4
|
|
-
|
|
name: Build and export to Docker
|
|
uses: docker/build-push-action@v7
|
|
with:
|
|
context: ./etherpad
|
|
target: production
|
|
load: true
|
|
tags: ${{ env.TEST_TAG }}
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
- uses: actions/cache@v5
|
|
name: Setup gnpm cache
|
|
if: always()
|
|
with:
|
|
path: |
|
|
${{ env.PNPM_HOME }}
|
|
~/.local/share/gnpm
|
|
/usr/local/bin/gnpm
|
|
/usr/local/bin/gnpm-0.0.12
|
|
key: ${{ runner.os }}-gnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-gnpm-store-
|
|
- name: Setup gnpm
|
|
uses: SamTV12345/gnpm-setup@main
|
|
with:
|
|
version: 0.0.12
|
|
-
|
|
name: Test
|
|
working-directory: etherpad
|
|
run: |
|
|
docker run --rm -d -p 9001:9001 --name test ${{ env.TEST_TAG }}
|
|
./bin/installDeps.sh
|
|
docker logs -f test &
|
|
while true; do
|
|
echo "Waiting for Docker container to start..."
|
|
status=$(docker container inspect -f '{{.State.Health.Status}}' test) || exit 1
|
|
case ${status} in
|
|
healthy) break;;
|
|
starting) sleep 2;;
|
|
*) printf %s\\n "unexpected status: ${status}" >&2; exit 1;;
|
|
esac
|
|
done
|
|
(cd src && gnpm run test-container)
|
|
git clean -dxf .
|
|
|
|
build-test-mysql:
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
services:
|
|
mysql:
|
|
image: mysql:8
|
|
env:
|
|
MYSQL_ROOT_PASSWORD: password
|
|
MYSQL_DATABASE: etherpad
|
|
MYSQL_USER: etherpad
|
|
MYSQL_PASSWORD: password
|
|
ports:
|
|
- 3306:3306
|
|
options: >-
|
|
--health-cmd="mysqladmin ping -h 127.0.0.1 -uroot -ppassword"
|
|
--health-interval=5s
|
|
--health-timeout=5s
|
|
--health-retries=10
|
|
steps:
|
|
-
|
|
name: Check out
|
|
uses: actions/checkout@v6
|
|
with:
|
|
path: etherpad
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v4
|
|
-
|
|
name: Build and export to Docker
|
|
uses: docker/build-push-action@v7
|
|
with:
|
|
context: ./etherpad
|
|
target: production
|
|
load: true
|
|
tags: ${{ env.TEST_TAG }}
|
|
cache-from: type=gha
|
|
cache-to: type=gha,mode=max
|
|
-
|
|
name: Test with MySQL database
|
|
run: |
|
|
docker run --rm -d \
|
|
--network host \
|
|
-e DB_TYPE=mysql \
|
|
-e DB_HOST=127.0.0.1 \
|
|
-e DB_PORT=3306 \
|
|
-e DB_NAME=etherpad \
|
|
-e DB_USER=etherpad \
|
|
-e DB_PASS=password \
|
|
-e DB_CHARSET=utf8mb4 \
|
|
--name test-mysql ${{ env.TEST_TAG }}
|
|
docker logs -f test-mysql &
|
|
attempt=0
|
|
while true; do
|
|
echo "Waiting for Docker container to start (attempt $attempt)..."
|
|
status=$(docker container inspect -f '{{.State.Health.Status}}' test-mysql 2>/dev/null) || { echo "Container exited"; docker logs test-mysql; exit 1; }
|
|
case ${status} in
|
|
healthy) echo "Container is healthy!"; break;;
|
|
starting) sleep 2;;
|
|
*) printf %s\\n "unexpected status: ${status}" >&2; docker logs test-mysql; exit 1;;
|
|
esac
|
|
attempt=$((attempt + 1))
|
|
if [ $attempt -gt 60 ]; then
|
|
echo "Timed out waiting for container"
|
|
docker logs test-mysql
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
publish:
|
|
needs: build-test
|
|
if: github.event_name == 'push'
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
steps:
|
|
-
|
|
name: Check out
|
|
uses: actions/checkout@v6
|
|
with:
|
|
path: etherpad
|
|
-
|
|
name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v4
|
|
-
|
|
name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v4
|
|
-
|
|
name: Docker meta
|
|
id: meta
|
|
uses: docker/metadata-action@v6
|
|
with:
|
|
images: |
|
|
etherpad/etherpad
|
|
ghcr.io/ether/etherpad
|
|
tags: |
|
|
type=ref,event=branch
|
|
type=semver,pattern={{version}}
|
|
type=semver,pattern={{major}}.{{minor}}
|
|
type=semver,pattern={{major}}
|
|
-
|
|
name: Log in to Docker Hub
|
|
uses: docker/login-action@v4
|
|
with:
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
-
|
|
name: Log in to GHCR
|
|
uses: docker/login-action@v4
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
-
|
|
name: Build and push
|
|
id: build-docker
|
|
uses: docker/build-push-action@v7
|
|
with:
|
|
context: ./etherpad
|
|
target: production
|
|
platforms: linux/amd64,linux/arm64
|
|
push: true
|
|
tags: ${{ steps.meta.outputs.tags }}
|
|
labels: ${{ steps.meta.outputs.labels }}
|
|
cache-from: type=gha
|
|
- name: Update repo description
|
|
uses: peter-evans/dockerhub-description@v5
|
|
if: github.ref == 'refs/heads/master'
|
|
with:
|
|
readme-filepath: ./etherpad/README.md
|
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
repository: etherpad/etherpad
|
|
enable-url-completion: true
|
|
- name: Check out ether-charts
|
|
if: github.ref == 'refs/heads/develop'
|
|
uses: actions/checkout@v6
|
|
with:
|
|
path: ether-charts
|
|
repository: ether/ether-charts
|
|
token: ${{ secrets.ETHER_CHART_TOKEN }}
|
|
- name: Update tag in values-dev.yaml
|
|
if: success() && github.ref == 'refs/heads/develop'
|
|
working-directory: ether-charts
|
|
run: |
|
|
sed -i 's/tag: ".*"/tag: "${{ steps.build-docker.outputs.digest }}"/' values-dev.yaml
|
|
- name: Commit and push changes
|
|
working-directory: ether-charts
|
|
if: success() && github.ref == 'refs/heads/develop'
|
|
run: |
|
|
git config --global user.name 'github-actions[bot]'
|
|
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
|
|
git add values-dev.yaml
|
|
git commit -m 'Update develop image tag'
|
|
git push
|