mirror of
https://github.com/offen/docker-volume-backup.git
synced 2024-11-22 05:10:28 +01:00
Migrate CI setup to GitHub Actions, also publish to GHCR (#199)
* Run tests in GitHub actions * Do not try to allocate a pseudo TTY when running compose commands * Try hard disabling TTY allocation * Use compose plugin * Test scripts shall not try to allocate a TTY * Pass correct base version * Check whether env var is even needed * Stop running tests in CircleCI * Run releases from GitHub actions as well * Manually construct tags to be pushed on release
This commit is contained in:
parent
a06ad1957a
commit
aee802cb09
@ -1,75 +0,0 @@
|
|||||||
version: 2.1
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
canary:
|
|
||||||
machine:
|
|
||||||
image: ubuntu-2004:202201-02
|
|
||||||
working_directory: ~/docker-volume-backup
|
|
||||||
resource_class: large
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- run:
|
|
||||||
name: Build
|
|
||||||
command: |
|
|
||||||
docker build . -t offen/docker-volume-backup:canary
|
|
||||||
- run:
|
|
||||||
name: Install gnupg
|
|
||||||
command: |
|
|
||||||
sudo apt-get install -y gnupg
|
|
||||||
- run:
|
|
||||||
name: Run tests
|
|
||||||
working_directory: ~/docker-volume-backup/test
|
|
||||||
command: |
|
|
||||||
export GPG_TTY=$(tty)
|
|
||||||
./test.sh canary
|
|
||||||
|
|
||||||
build:
|
|
||||||
docker:
|
|
||||||
- image: cimg/base:2020.06
|
|
||||||
environment:
|
|
||||||
DOCKER_BUILDKIT: '1'
|
|
||||||
DOCKER_CLI_EXPERIMENTAL: enabled
|
|
||||||
working_directory: ~/docker-volume-backup
|
|
||||||
resource_class: large
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- setup_remote_docker:
|
|
||||||
version: 20.10.6
|
|
||||||
- docker/install-docker-credential-helper:
|
|
||||||
release-tag: v0.6.4
|
|
||||||
- docker/configure-docker-credentials-store
|
|
||||||
- run:
|
|
||||||
name: Push to Docker Hub
|
|
||||||
command: |
|
|
||||||
echo "$DOCKER_ACCESSTOKEN" | docker login --username offen --password-stdin
|
|
||||||
# This is required for building ARM: https://gitlab.alpinelinux.org/alpine/aports/-/issues/12406
|
|
||||||
docker run --rm --privileged linuxkit/binfmt:v0.8
|
|
||||||
docker context create docker-volume-backup
|
|
||||||
docker buildx create docker-volume-backup --name docker-volume-backup --use
|
|
||||||
docker buildx inspect --bootstrap
|
|
||||||
tag_args="-t offen/docker-volume-backup:$CIRCLE_TAG"
|
|
||||||
if [[ "$CIRCLE_TAG" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
||||||
# prerelease tags like `v2.0.0-alpha.1` should not be released as `latest`
|
|
||||||
tag_args="$tag_args -t offen/docker-volume-backup:latest"
|
|
||||||
tag_args="$tag_args -t offen/docker-volume-backup:$(echo "$CIRCLE_TAG" | cut -d. -f1)"
|
|
||||||
fi
|
|
||||||
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 \
|
|
||||||
$tag_args . --push
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
version: 2
|
|
||||||
docker_image:
|
|
||||||
jobs:
|
|
||||||
- canary:
|
|
||||||
filters:
|
|
||||||
tags:
|
|
||||||
ignore: /^v.*/
|
|
||||||
- build:
|
|
||||||
filters:
|
|
||||||
branches:
|
|
||||||
ignore: /.*/
|
|
||||||
tags:
|
|
||||||
only: /^v.*/
|
|
||||||
|
|
||||||
orbs:
|
|
||||||
docker: circleci/docker@2.1.4
|
|
53
.github/workflows/release.yml
vendored
Normal file
53
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
name: Release Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags: ^v.*
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
push_to_registries:
|
||||||
|
name: Push Docker image to multiple registries
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
packages: write
|
||||||
|
contents: read
|
||||||
|
steps:
|
||||||
|
- name: Check out the repo
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKER_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||||
|
|
||||||
|
- name: Log in to GHCR
|
||||||
|
uses: docker/login-action@v2
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Extract Docker tags
|
||||||
|
id: meta
|
||||||
|
run: |
|
||||||
|
version_tag="${{github.ref_name}}"
|
||||||
|
tags=($version_tag)
|
||||||
|
if [[ "$version_tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
# prerelease tags like `v2.0.0-alpha.1` should not be released as `latest` nor `v2`
|
||||||
|
tags+=("latest")
|
||||||
|
tags+=($(echo "$version_tag" | cut -d. -f1))
|
||||||
|
fi
|
||||||
|
releases=""
|
||||||
|
for tag in "${tags[@]}"; do
|
||||||
|
releases="${releases:+$releases,}offen/docker-volume-backup:$tag,ghcr.io/offen/docker-volume-backup:$tag"
|
||||||
|
done
|
||||||
|
echo "releases=$releases" >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
|
- name: Build and push Docker images
|
||||||
|
uses: docker/build-push-action@v4
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
push: true
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||||
|
tags: ${{ steps.meta.outputs.releases }}
|
17
.github/workflows/test.yml
vendored
Normal file
17
.github/workflows/test.yml
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
name: Run Integration Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
- push
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: Build Docker Image
|
||||||
|
run: docker build . -t offen/docker-volume-backup:test
|
||||||
|
- name: Run Tests
|
||||||
|
working-directory: ./test
|
||||||
|
run: |
|
||||||
|
export GPG_TTY=$(tty)
|
||||||
|
./test.sh test
|
@ -6,12 +6,12 @@ cd "$(dirname "$0")"
|
|||||||
. ../util.sh
|
. ../util.sh
|
||||||
current_test=$(basename $(pwd))
|
current_test=$(basename $(pwd))
|
||||||
|
|
||||||
docker-compose up -d
|
docker compose up -d
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
# A symlink for a known file in the volume is created so the test can check
|
# A symlink for a known file in the volume is created so the test can check
|
||||||
# whether symlinks are preserved on backup.
|
# whether symlinks are preserved on backup.
|
||||||
docker-compose exec backup backup
|
docker compose exec backup backup
|
||||||
|
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
@ -29,12 +29,12 @@ pass "Found relevant files in untared remote backups."
|
|||||||
BACKUP_RETENTION_DAYS="0" docker-compose up -d
|
BACKUP_RETENTION_DAYS="0" docker-compose up -d
|
||||||
sleep 5
|
sleep 5
|
||||||
|
|
||||||
docker-compose exec backup backup
|
docker compose exec backup backup
|
||||||
|
|
||||||
docker-compose run --rm az_cli \
|
docker compose run --rm az_cli \
|
||||||
az storage blob download -f /dump/test.tar.gz -c test-container -n path/to/backup/test.tar.gz
|
az storage blob download -f /dump/test.tar.gz -c test-container -n path/to/backup/test.tar.gz
|
||||||
test -f ./local/test.tar.gz
|
test -f ./local/test.tar.gz
|
||||||
|
|
||||||
pass "Remote backups have not been deleted."
|
pass "Remote backups have not been deleted."
|
||||||
|
|
||||||
docker-compose down --volumes
|
docker compose down --volumes
|
||||||
|
@ -33,7 +33,7 @@ sleep 5
|
|||||||
|
|
||||||
expect_running_containers "3"
|
expect_running_containers "3"
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v minio_backup_data:/minio_data \
|
-v minio_backup_data:/minio_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c 'tar -xvf /minio_data/backup/test.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
ash -c 'tar -xvf /minio_data/backup/test.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
||||||
|
@ -48,7 +48,7 @@ docker run --rm \
|
|||||||
--entrypoint backup \
|
--entrypoint backup \
|
||||||
offen/docker-volume-backup:${TEST_VERSION:-canary}
|
offen/docker-volume-backup:${TEST_VERSION:-canary}
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v backup_data:/data alpine \
|
-v backup_data:/data alpine \
|
||||||
ash -c 'tar -xvf /data/backup/test.tar.gz && test -f /backup/app_data/offen.db && test -d /backup/empty_data'
|
ash -c 'tar -xvf /data/backup/test.tar.gz && test -f /backup/app_data/offen.db && test -d /backup/empty_data'
|
||||||
|
|
||||||
|
@ -8,9 +8,10 @@ current_test=$(basename $(pwd))
|
|||||||
|
|
||||||
mkdir -p local
|
mkdir -p local
|
||||||
|
|
||||||
|
export BASE_VERSION="${TEST_VERSION:-canary}"
|
||||||
export TEST_VERSION="${TEST_VERSION:-canary}-with-rsync"
|
export TEST_VERSION="${TEST_VERSION:-canary}-with-rsync"
|
||||||
|
|
||||||
docker build . -t offen/docker-volume-backup:$TEST_VERSION
|
docker build . -t offen/docker-volume-backup:$TEST_VERSION --build-arg version=$BASE_VERSION
|
||||||
|
|
||||||
docker compose up -d
|
docker compose up -d
|
||||||
sleep 5
|
sleep 5
|
||||||
|
@ -17,7 +17,7 @@ sleep 5
|
|||||||
|
|
||||||
expect_running_containers "3"
|
expect_running_containers "3"
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v minio_backup_data:/minio_data \
|
-v minio_backup_data:/minio_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c 'tar -xvf /minio_data/backup/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
ash -c 'tar -xvf /minio_data/backup/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
||||||
@ -32,7 +32,7 @@ sleep 5
|
|||||||
|
|
||||||
docker compose exec backup backup
|
docker compose exec backup backup
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v minio_backup_data:/minio_data \
|
-v minio_backup_data:/minio_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c '[ $(find /minio_data/backup/ -type f | wc -l) = "1" ]'
|
ash -c '[ $(find /minio_data/backup/ -type f | wc -l) = "1" ]'
|
||||||
|
@ -22,7 +22,7 @@ sleep 20
|
|||||||
|
|
||||||
docker exec $(docker ps -q -f name=backup) backup
|
docker exec $(docker ps -q -f name=backup) backup
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v backup_data:/data alpine \
|
-v backup_data:/data alpine \
|
||||||
ash -c 'tar -xf /data/backup/test.tar.gz && test -f /backup/pg_data/PG_VERSION'
|
ash -c 'tar -xf /data/backup/test.tar.gz && test -f /backup/pg_data/PG_VERSION'
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ sleep 5
|
|||||||
|
|
||||||
expect_running_containers 3
|
expect_running_containers 3
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v ssh_backup_data:/ssh_data \
|
-v ssh_backup_data:/ssh_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c 'tar -xvf /ssh_data/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
ash -c 'tar -xvf /ssh_data/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
||||||
@ -32,7 +32,7 @@ sleep 5
|
|||||||
|
|
||||||
docker compose exec backup backup
|
docker compose exec backup backup
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v ssh_backup_data:/ssh_data \
|
-v ssh_backup_data:/ssh_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c '[ $(find /ssh_data/ -type f | wc -l) = "1" ]'
|
ash -c '[ $(find /ssh_data/ -type f | wc -l) = "1" ]'
|
||||||
|
@ -19,7 +19,7 @@ sleep 20
|
|||||||
|
|
||||||
docker exec $(docker ps -q -f name=backup) backup
|
docker exec $(docker ps -q -f name=backup) backup
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v backup_data:/data alpine \
|
-v backup_data:/data alpine \
|
||||||
ash -c 'tar -xf /data/backup/test.tar.gz && test -f /backup/pg_data/PG_VERSION'
|
ash -c 'tar -xf /data/backup/test.tar.gz && test -f /backup/pg_data/PG_VERSION'
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ sleep 5
|
|||||||
|
|
||||||
expect_running_containers "3"
|
expect_running_containers "3"
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v webdav_backup_data:/webdav_data \
|
-v webdav_backup_data:/webdav_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c 'tar -xvf /webdav_data/data/my/new/path/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
ash -c 'tar -xvf /webdav_data/data/my/new/path/test-hostnametoken.tar.gz -C /tmp && test -f /tmp/backup/app_data/offen.db'
|
||||||
@ -30,7 +30,7 @@ sleep 5
|
|||||||
|
|
||||||
docker compose exec backup backup
|
docker compose exec backup backup
|
||||||
|
|
||||||
docker run --rm -it \
|
docker run --rm \
|
||||||
-v webdav_backup_data:/webdav_data \
|
-v webdav_backup_data:/webdav_data \
|
||||||
alpine \
|
alpine \
|
||||||
ash -c '[ $(find /webdav_data/data/my/new/path/ -type f | wc -l) = "1" ]'
|
ash -c '[ $(find /webdav_data/data/my/new/path/ -type f | wc -l) = "1" ]'
|
||||||
|
Loading…
Reference in New Issue
Block a user