name: CI on: push: branches: - main pull_request: branches: - main schedule: - cron: '0 0 * * 0' # at midnight of each sunday workflow_dispatch: env: CARGO_TERM_COLOR: always jobs: skip-check: permissions: actions: write contents: read runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@v5 with: concurrent_skipping: 'same_content_newer' cancel_others: true paths_ignore: '["*.md"]' develop: needs: skip-check if: needs.skip-check.outputs.should_skip != 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup with: cache-shared-key: "develop" - name: Install s3s-e2e run: | cargo install s3s-e2e --git https://github.com/Nugine/s3s.git s3s-e2e --version - name: Format run: cargo fmt --all --check - name: Lint run: cargo check --all-targets # TODO: cargo clippy - name: Build debug run: | touch rustfs/build.rs cargo build -p rustfs --bins - name: Build release run: | touch rustfs/build.rs cargo build -p rustfs --bins --release - run: | mkdir -p ./target/artifacts cp target/debug/rustfs ./target/artifacts/rustfs-debug cp target/release/rustfs ./target/artifacts/rustfs-release - uses: actions/upload-artifact@v4 with: name: rustfs path: ./target/artifacts/* test: name: Test needs: - skip-check - develop if: needs.skip-check.outputs.should_skip != 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup with: cache-shared-key: "develop" cache-save-if: "false" - run: cargo test --all --exclude e2e_test s3s-e2e: name: E2E (s3s-e2e) needs: - skip-check - develop if: needs.skip-check.outputs.should_skip != 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup with: cache-shared-key: "develop" cache-save-if: false - name: Install s3s-e2e run: | cargo install s3s-e2e --git https://github.com/Nugine/s3s.git s3s-e2e --version - uses: actions/download-artifact@v4 with: name: rustfs path: ./target/artifacts - name: Run rustfs run: | ./scripts/e2e-run.sh ./target/artifacts/rustfs-debug /data/rustfs sleep 10 - name: Run s3s-e2e timeout-minutes: 10 run: | export AWS_ACCESS_KEY_ID=rustfsadmin export AWS_SECRET_ACCESS_KEY=rustfsadmin export AWS_REGION=us-east-1 export AWS_ENDPOINT_URL=http://localhost:9000 export RUST_LOG="s3s_e2e=debug,s3s_test=info,s3s=debug" export RUST_BACKTRACE=full s3s-e2e sudo killall rustfs-debug - uses: actions/upload-artifact@v4 with: name: s3s-e2e.logs path: /tmp/rustfs.log mint: name: E2E (mint) needs: - skip-check - develop if: needs.skip-check.outputs.should_skip != 'true' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: ./.github/actions/setup with: cache-shared-key: "develop" cache-save-if: false - uses: actions/download-artifact@v4 with: name: rustfs path: ./target/artifacts - name: Run rustfs run: | ./scripts/e2e-run.sh ./target/artifacts/rustfs-release /data/rustfs sleep 10 - name: Run mint timeout-minutes: 10 run: | docker run \ -e "SERVER_ENDPOINT=localhost:9000" \ -e "ACCESS_KEY=rustfsadmin" \ -e "SECRET_KEY=rustfsadmin" \ -e "ENABLE_HTTPS=0" \ --network host \ minio/mint:edge sudo killall rustfs-release - uses: actions/upload-artifact@v4 with: name: mint.logs path: /tmp/rustfs.log