Avoid using absolute paths in arguments #287
This file contains 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: CI + CD | |
on: | |
pull_request: | |
push: | |
branches: | |
- main | |
workflow_dispatch: | |
# Make sure CI fails on all warnings, including Clippy lints | |
env: | |
RUSTFLAGS: "-Dwarnings" | |
jobs: | |
lint: # Also checks formatting. | |
name: Run lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Setup env | |
uses: ./.github/actions/setup-env | |
with: | |
rust_cache_key: cargo | |
rust_components: clippy, rustfmt | |
- uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cache/pre-commit | |
key: | |
${{ runner.os }}-pre-commit-${{ | |
hashFiles('**/.pre-commit-config.yaml') }} | |
- name: Run lint | |
run: | | |
just pre-commit | |
just lint | |
unit: | |
name: Run unit test | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Setup env | |
uses: ./.github/actions/setup-env | |
with: | |
rust_cache_key: cargo | |
- name: Run unit test | |
run: just test | |
build: | |
name: Build release | |
needs: | |
- lint | |
- unit | |
strategy: | |
matrix: | |
build: | |
- linux | |
- macos | |
include: | |
- build: linux | |
os: ubuntu-latest | |
target: x86_64-unknown-linux-musl | |
- build: macos | |
os: macos-latest | |
target: x86_64-apple-darwin | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Setup env | |
uses: ./.github/actions/setup-env | |
with: | |
rust_cache_key: cross | |
rust_target: ${{ matrix.target }} | |
- name: Build release | |
run: | | |
just get-cross | |
just cross ${{ matrix.target }} | |
- name: Upload binary artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: pls-${{ matrix.target }} | |
path: target/${{ matrix.target }}/release/pls | |
docs: | |
name: Publish docs | |
runs-on: ubuntu-latest | |
needs: | |
- build | |
permissions: | |
pages: write # to deploy to GitHub Pages | |
id-token: write # to verify the deployment originates from an appropriate source | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
- name: Setup env | |
uses: ./.github/actions/setup-env | |
with: | |
rust_cache_key: docs | |
- name: Download artifact | |
uses: actions/download-artifact@v3 | |
with: | |
name: pls-x86_64-unknown-linux-musl | |
path: /tmp/pls | |
- name: Make binary accessible and executable | |
run: | | |
chmod +x /tmp/pls/pls | |
echo "/tmp/pls" >> $GITHUB_PATH | |
# This must be a separate step because `$PATH` changes are not reflected | |
# immediately. | |
- name: Ensure binary is accessible | |
run: pls --version | |
- name: Setup Python | |
uses: actions/setup-python@v3 | |
with: | |
python-version: 3.11 | |
- name: Setup Poetry | |
uses: snok/install-poetry@v1 | |
with: | |
virtualenvs-in-project: true | |
- name: Setup pnpm | |
uses: pnpm/action-setup@v2 | |
with: | |
version: 8 | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.x | |
cache: pnpm | |
cache-dependency-path: docs/pnpm-lock.yaml | |
- name: Install all dependencies | |
run: just install | |
- name: Generate examples | |
working-directory: examples/ | |
run: just all | |
- name: Build docs | |
working-directory: docs/ | |
run: pnpm build | |
- name: Upload GitHub Pages artifact | |
uses: actions/upload-pages-artifact@v2 | |
with: | |
path: docs/dist/ | |
- id: deployment | |
name: Deploy to GitHub Pages | |
if: | |
github.event_name == 'push' || github.event_name == | |
'workflow_dispatch' | |
uses: actions/deploy-pages@v2 |