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