name: "GC stress test" on: push: branches: - main pull_request: branches: [main] release: types: - published permissions: read-all jobs: gc-referrers-stress-local: name: GC(with referrers) on filesystem with short interval runs-on: oracle-vm-8cpu-32gb-x86-64 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: cache: false check-latest: true go-version: 1.25.x - name: Run zb id: bench run: | make binary make bench ./bin/zot-linux-amd64 serve test/gc-stress/config-gc-referrers-bench-local.json & sleep 10 bin/zb-linux-amd64 -c 10 -n 100 -o ci-cd http://localhost:8080 killall -r zot-* # clean zot storage sudo rm -rf /tmp/zot continue-on-error: true - name: Upload zot logs uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: gc-referrers-bench-local path: /tmp/gc-referrers-bench-local.log if-no-files-found: error - name: Check on failures if: steps.bench.outcome != 'success' run: | cat /tmp/gc-referrers-bench-local.log exit 1 gc-stress-local: name: GC(without referrers) on filesystem with short interval runs-on: oracle-vm-8cpu-32gb-x86-64 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: cache: false check-latest: true go-version: 1.25.x - name: Run zb id: bench run: | make binary make bench ./bin/zot-linux-amd64 serve test/gc-stress/config-gc-bench-local.json & sleep 10 bin/zb-linux-amd64 -c 10 -n 100 -o ci-cd http://localhost:8080 killall -r zot-* # clean zot storage sudo rm -rf /tmp/zot continue-on-error: true - name: Upload zot logs uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: gc-bench-local path: /tmp/gc-bench-local.log if-no-files-found: error - name: Check on failures if: steps.bench.outcome != 'success' run: | cat /tmp/gc-bench-local.log exit 1 gc-referrers-stress-s3: name: GC(with referrers) on S3(minio) with short interval runs-on: oracle-vm-8cpu-32gb-x86-64 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: cache: false check-latest: true go-version: 1.25.x - uses: ./.github/actions/setup-localstack - name: Setup minio service run: | docker run -d -p 9000:9000 --name minio \ -e "MINIO_ACCESS_KEY=minioadmin" \ -e "MINIO_SECRET_KEY=minioadmin" \ -v /tmp/data:/data \ -v /tmp/config:/root/.minio \ --health-cmd "curl http://localhost:9000/minio/health/live" \ minio/minio:RELEASE.2024-07-16T23-46-41Z server /data - name: Install py minio run: pip3 install minio==7.2.18 - name: Wait for minio to come up run: | sleep 10 curl --connect-timeout 5 \ --max-time 120 \ --retry 12 \ --retry-max-time 120 \ 'http://localhost:9000/minio/health/live' - name: Create minio bucket run: | python3 - <<'EOF' from minio import Minio try: minio = Minio( 'localhost:9000', access_key='minioadmin', secret_key='minioadmin', secure=False ) except Exception as ex: raise minio.make_bucket('zot-storage') print(f'{minio.list_buckets()}') EOF - name: Run zb id: bench run: | make binary make bench ./bin/zot-linux-amd64 serve test/gc-stress/config-gc-referrers-bench-s3-minio.json & sleep 10 bin/zb-linux-amd64 -c 10 -n 100 -o ci-cd http://localhost:8080 killall -r zot-* # clean zot storage sudo rm -rf /tmp/zot env: AWS_ACCESS_KEY_ID: fake AWS_SECRET_ACCESS_KEY: fake continue-on-error: true - name: Upload zot logs uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: gc-referrers-bench-s3 path: /tmp/gc-referrers-bench-s3.log if-no-files-found: error - name: Check on failures if: steps.bench.outcome != 'success' run: | cat /tmp/gc-referrers-bench-s3.log exit 1 - uses: ./.github/actions/teardown-localstack gc-stress-s3: name: GC(without referrers) on S3(minio) with short interval runs-on: oracle-vm-8cpu-32gb-x86-64 steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: cache: false check-latest: true go-version: 1.25.x - uses: ./.github/actions/setup-localstack - name: Setup minio service run: | docker run -d -p 9000:9000 --name minio \ -e "MINIO_ACCESS_KEY=minioadmin" \ -e "MINIO_SECRET_KEY=minioadmin" \ -v /tmp/data:/data \ -v /tmp/config:/root/.minio \ --health-cmd "curl http://localhost:9000/minio/health/live" \ minio/minio:RELEASE.2024-07-16T23-46-41Z server /data - name: Install py minio run: pip3 install minio==7.2.18 - name: Wait for minio to come up run: | sleep 10 curl --connect-timeout 5 \ --max-time 120 \ --retry 12 \ --retry-max-time 120 \ 'http://localhost:9000/minio/health/live' - name: Create minio bucket run: | python3 - <<'EOF' from minio import Minio try: minio = Minio( 'localhost:9000', access_key='minioadmin', secret_key='minioadmin', secure=False ) except Exception as ex: raise minio.make_bucket('zot-storage') print(f'{minio.list_buckets()}') EOF - name: Run zb id: bench run: | make binary make bench ./bin/zot-linux-amd64 serve test/gc-stress/config-gc-bench-s3-minio.json & sleep 10 bin/zb-linux-amd64 -c 10 -n 100 -o ci-cd http://localhost:8080 killall -r zot-* # clean zot storage sudo rm -rf /tmp/zot env: AWS_ACCESS_KEY_ID: fake AWS_SECRET_ACCESS_KEY: fake continue-on-error: true - name: Upload zot logs uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: always() with: name: gc-bench-s3 path: /tmp/gc-bench-s3.log if-no-files-found: error - name: Check on failures if: steps.bench.outcome != 'success' run: | cat /tmp/gc-bench-s3.log exit 1 - uses: ./.github/actions/teardown-localstack