Merge pull request #197 from jkaninda/dependabot/go_modules/github.co… #63
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | name: Tests | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - nightly | |
| pull_request: | |
| branches: | |
| - main | |
| env: | |
| IMAGE_NAME: mysql-bkup | |
| jobs: | |
| test: | |
| runs-on: ubuntu-latest | |
| services: | |
| mysql: | |
| image: mysql:9 | |
| env: | |
| MYSQL_ROOT_PASSWORD: password | |
| MYSQL_DATABASE: testdb | |
| MYSQL_USER: user | |
| MYSQL_PASSWORD: password | |
| ports: | |
| - 3306:3306 | |
| options: >- | |
| --health-cmd="mysqladmin ping -h 127.0.0.1 -uuser -ppassword" | |
| --health-interval=10s | |
| --health-timeout=5s | |
| --health-retries=5 | |
| mysql8: | |
| image: mysql:8 | |
| env: | |
| MYSQL_ROOT_PASSWORD: password | |
| MYSQL_DATABASE: testdb | |
| MYSQL_USER: user | |
| MYSQL_PASSWORD: password | |
| ports: | |
| - 3308:3306 | |
| options: >- | |
| --health-cmd="mysqladmin ping -h 127.0.0.1 -uuser -ppassword" | |
| --health-interval=10s | |
| --health-timeout=5s | |
| --health-retries=5 | |
| mysql5: | |
| image: mysql:5 | |
| env: | |
| MYSQL_ROOT_PASSWORD: password | |
| MYSQL_DATABASE: testdb | |
| MYSQL_USER: user | |
| MYSQL_PASSWORD: password | |
| ports: | |
| - 3305:3306 | |
| options: >- | |
| --health-cmd="mysqladmin ping -h 127.0.0.1 -uuser -ppassword" | |
| --health-interval=10s | |
| --health-timeout=5s | |
| --health-retries=5 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Create Minio container | |
| run: | | |
| docker run -d --rm --name minio \ | |
| --network host \ | |
| -p 9000:9000 \ | |
| -e MINIO_ACCESS_KEY=minioadmin \ | |
| -e MINIO_SECRET_KEY=minioadmin \ | |
| -e MINIO_REGION_NAME="eu" \ | |
| minio/minio server /data | |
| echo "Create Minio container completed" | |
| - name: Install MinIO Client (mc) | |
| run: | | |
| curl -O https://dl.min.io/client/mc/release/linux-amd64/mc | |
| chmod +x mc | |
| sudo mv mc /usr/local/bin/ | |
| - name: Wait for MinIO to be ready | |
| run: sleep 5 | |
| - name: Configure MinIO Client | |
| run: | | |
| mc alias set local http://localhost:9000 minioadmin minioadmin | |
| mc alias list | |
| - name: Create MinIO Bucket | |
| run: | | |
| mc mb local/backups | |
| echo "Bucket backups created successfully." | |
| # Build the Docker image | |
| - name: Build Docker Image | |
| run: | | |
| docker buildx build --build-arg appVersion=test -t ${{ env.IMAGE_NAME }}:latest --load . | |
| - name: Verify Docker images | |
| run: | | |
| docker images | |
| - name: Wait for MySQL to be ready | |
| run: | | |
| docker run --rm --network host mysql:9 mysqladmin ping -h 127.0.0.1 -uuser -ppassword --wait | |
| - name: Test restore | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest restore -f init.sql | |
| echo "Database restore completed" | |
| - name: Test restore Mysql8 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_PORT=3308 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest restore -f init.sql | |
| echo "Test restore Mysql8 completed" | |
| - name: Test restore Mysql5 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_PORT=3305 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest restore -f init.sql | |
| echo "Test restore Mysql5 completed" | |
| - name: Test backup | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest backup | |
| echo "Database backup completed" | |
| - name: Test backup Mysql8 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_PORT=3308 \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest backup | |
| echo "Test backup Mysql8 completed" | |
| - name: Test backup Mysql5 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_PORT=3305 \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest backup | |
| echo "Test backup Mysql5 completed" | |
| - name: Test encrypted backup | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e GPG_PASSPHRASE=password \ | |
| ${{ env.IMAGE_NAME }}:latest backup -d testdb --disable-compression --custom-name encrypted-bkup | |
| echo "Database encrypted backup completed" | |
| - name: Test restore encrypted backup | testdb -> testdb2 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e GPG_PASSPHRASE=password \ | |
| -e DB_NAME=testdb2 \ | |
| ${{ env.IMAGE_NAME }}:latest restore -f /backup/encrypted-bkup.sql.gpg | |
| echo "Test restore encrypted backup completed" | |
| - name: Test migrate database testdb -> testdb3 | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e GPG_PASSPHRASE=password \ | |
| -e DB_NAME=testdb \ | |
| -e TARGET_DB_HOST=127.0.0.1 \ | |
| -e TARGET_DB_PORT=3306 \ | |
| -e TARGET_DB_NAME=testdb3 \ | |
| -e TARGET_DB_USERNAME=root \ | |
| -e TARGET_DB_PASSWORD=password \ | |
| ${{ env.IMAGE_NAME }}:latest migrate | |
| echo "Test migrate database testdb -> testdb3 completed" | |
| - name: Test backup all databases | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=root \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest backup --all-databases | |
| echo "Database backup completed" | |
| - name: Test multiple backup | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e TESTDB2_DB_USERNAME=root \ | |
| -e TESTDB2_DB_PASSWORD=password \ | |
| -e TESTDB2_DB_HOST=127.0.0.1 \ | |
| ${{ env.IMAGE_NAME }}:latest backup -c /backup/test_config.yaml | |
| echo "Database backup completed" | |
| - name: Test backup Minio (s3) | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| -e AWS_S3_ENDPOINT="http://127.0.0.1:9000" \ | |
| -e AWS_S3_BUCKET_NAME=backups \ | |
| -e AWS_ACCESS_KEY=minioadmin \ | |
| -e AWS_SECRET_KEY=minioadmin \ | |
| -e AWS_DISABLE_SSL="true" \ | |
| -e AWS_REGION="eu" \ | |
| -e AWS_FORCE_PATH_STYLE="true" ${{ env.IMAGE_NAME }}:latest backup -s s3 --custom-name minio-backup | |
| echo "Test backup Minio (s3) completed" | |
| - name: Test restore Minio (s3) | |
| run: | | |
| docker run --rm --name ${{ env.IMAGE_NAME }} \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| -e AWS_S3_ENDPOINT="http://127.0.0.1:9000" \ | |
| -e AWS_S3_BUCKET_NAME=backups \ | |
| -e AWS_ACCESS_KEY=minioadmin \ | |
| -e AWS_SECRET_KEY=minioadmin \ | |
| -e AWS_DISABLE_SSL="true" \ | |
| -e AWS_REGION="eu" \ | |
| -e AWS_FORCE_PATH_STYLE="true" ${{ env.IMAGE_NAME }}:latest restore -s s3 -f minio-backup.sql.gz | |
| echo "Test backup Minio (s3) completed" | |
| - name: Test scheduled backup | |
| run: | | |
| docker run -d --rm --name ${{ env.IMAGE_NAME }} \ | |
| -v ./migrations:/backup/ \ | |
| --network host \ | |
| -e DB_HOST=127.0.0.1 \ | |
| -e DB_USERNAME=user \ | |
| -e DB_PASSWORD=password \ | |
| -e DB_NAME=testdb \ | |
| ${{ env.IMAGE_NAME }}:latest backup -e "@every 10s" | |
| echo "Waiting for backup to be done..." | |
| sleep 25 | |
| docker logs ${{ env.IMAGE_NAME }} | |
| echo "Test scheduled backup completed" | |
| # Cleanup: Stop and remove containers | |
| - name: Clean up | |
| run: | | |
| docker stop ${{ env.IMAGE_NAME }} || true | |
| docker rm ${{ env.IMAGE_NAME }} || true |