name: CI on: push: branches: [main] permissions: contents: write jobs: Check: strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] item: [ build, clippy, test, arg-picker, markdown-code, examples, docs-refresh, api-docs, ] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 - uses: actions-rust-lang/setup-rust-toolchain@v1 - run: cargo ci --check-${{ matrix.item }} - name: Upload docs test result on failure if: failure() && matrix.item == 'markdown-code' uses: actions/upload-artifact@v4 with: name: docs-test-result-${{ matrix.os }}.md path: .temp/DOCS-TEST-RESULT.md # Build the distributable packages in parallel with the checks, so that the # `unreleased` tag and the Pages deployment always publish fresh artifacts. Build: strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v7 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Compute package metadata id: metadata shell: bash run: | case "$RUNNER_OS" in Windows) os="win" ;; Linux) os="linux" ;; macOS) os="mac" ;; esac echo "os=$os" >> "$GITHUB_OUTPUT" - name: Install mling shell: bash run: | if [ "$RUNNER_OS" = "Windows" ]; then powershell -ExecutionPolicy Bypass -File .run/src/bin/install-mling.ps1 else bash .run/src/bin/install-mling.sh fi - name: Package mling shell: bash run: | mkdir -p dist name="mling-${{ steps.metadata.outputs.os }}.tar.gz" tar -czf "dist/$name" -C .temp/mling . if command -v sha256sum >/dev/null 2>&1; then (cd dist && sha256sum "$name" > "$name.sha256") else (cd dist && shasum -a 256 "$name" > "$name.sha256") fi - name: Upload mling package uses: actions/upload-artifact@v4 with: name: mling-${{ steps.metadata.outputs.os }}-pkg path: dist/mling-* if-no-files-found: error Move-Unreleased-Tag: if: github.ref == 'refs/heads/main' needs: [Check, Build] runs-on: ubuntu-latest steps: - uses: actions/checkout@v7 with: fetch-depth: 0 - run: | git tag -f unreleased git push origin unreleased --force Deploy-Github-Pages: needs: [Move-Unreleased-Tag] permissions: contents: read pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v7 - uses: actions-rust-lang/setup-rust-toolchain@v1 - name: Install nightly toolchain run: rustup toolchain install nightly - name: Build API docs run: cargo +nightly run --manifest-path .run/Cargo.toml --bin deploy-api-docs -- --docsrs - name: Install cargo-llvm-cov run: cargo install --git https://github.com/Weicao-CatilGrass/cargo-llvm-cov cargo-llvm-cov - name: Run cov-test run: cargo run --manifest-path .run/Cargo.toml --bin cov-test - name: Delete .temp directory before deployment run: rm -rf .temp - name: Download mling packages uses: actions/download-artifact@v4 with: path: dist merge-multiple: true - name: Setup Pages uses: actions/configure-pages@v5 - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: path: "." - name: Deploy to GitHub Pages id: deployment uses: actions/deploy-pages@v5