name: Test on: pull_request: push: branches: - main env: CARGO_TERM_COLOR: always jobs: format: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install formatting dependencies run: | sudo apt update sudo apt install gettext yapf3 - name: Install nightly rustfmt run: | rustup default nightly rustup component add rustfmt - name: Check formatting uses: dprint/check@v2.2 typos: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Check for typos uses: crate-ci/typos@v1.17.2 with: config: ./.github/typos.toml cargo: strategy: matrix: os: - ubuntu-latest - macos-latest runs-on: ${{ matrix.os }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Rust cache uses: ./.github/workflows/setup-rust-cache - name: Build Rust code run: cargo build - name: Test Rust code run: cargo test bare-metal: runs-on: ubuntu-latest strategy: matrix: include: - directory: src/bare-metal/alloc-example target: aarch64-unknown-none - directory: src/bare-metal/aps/examples target: aarch64-unknown-none - directory: src/bare-metal/microcontrollers/examples target: thumbv7em-none-eabihf - directory: src/exercises/bare-metal/compass target: thumbv7em-none-eabihf - directory: src/exercises/bare-metal/rtc target: aarch64-unknown-none steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Rust cache uses: ./.github/workflows/setup-rust-cache - name: Install dependencies run: | sudo apt update sudo apt install gcc-aarch64-linux-gnu - name: Install toolchain run: rustup target add ${{ matrix.target }} - name: Build Rust code working-directory: ${{ matrix.directory }} run: cargo build find-languages: runs-on: ubuntu-latest outputs: languages: ${{ steps.find-languages.outputs.languages }} steps: - name: Checkout uses: actions/checkout@v4 - name: Find languages id: find-languages shell: python run: | import os, json, pathlib languages = ["en"] + [p.stem for p in pathlib.Path("po").iterdir() if p.suffix == ".po"] github_output = open(os.environ["GITHUB_OUTPUT"], "a") github_output.write("languages=") json.dump(sorted(languages), github_output) build: runs-on: ubuntu-latest needs: - find-languages strategy: matrix: language: ${{ fromJSON(needs.find-languages.outputs.languages) }} fail-fast: false steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 # We need the full history for build.sh below. - name: Setup Rust cache uses: ./.github/workflows/setup-rust-cache - name: Install Gettext run: | sudo apt update sudo apt install gettext - name: Install mdbook uses: ./.github/workflows/install-mdbook - name: Test format of ${{ matrix.language }} translation if: matrix.language != 'en' run: msgfmt --statistics -o /dev/null po/${{ matrix.language }}.po - name: Test extracting English strings if: matrix.language == 'en' run: | MDBOOK_OUTPUT='{"xgettext": {"pot-file": "messages.pot"}}' mdbook build -d po msgfmt -o /dev/null --statistics po/messages.pot - name: Build ${{ matrix.language }} translation run: | .github/workflows/build.sh ${{ matrix.language }} book/comprehensive-rust-${{ matrix.language }} # Upload the book now to retain it in case mdbook test fails. - name: Upload book uses: actions/upload-artifact@v4 with: name: comprehensive-rust-${{ matrix.language }} path: book/ - name: Test code snippets run: mdbook test