diff --git a/.github/templates/setup-worker/action.yaml b/.github/templates/setup-worker/action.yaml new file mode 100644 index 00000000..8219df84 --- /dev/null +++ b/.github/templates/setup-worker/action.yaml @@ -0,0 +1,32 @@ +name: setup-worker +description: | + This action sets up a worker for use in other actions. It installs the + necessary dependencies for building the project. + +inputs: + rust-components: + description: Comma-separated list of components to be additionally installed for a new rust toolchain + required: false + +runs: + using: "composite" + + steps: + - name: Setup Ubuntu dependencies + shell: bash + run: sudo apt update && sudo apt install -y git clang curl libssl-dev llvm libudev-dev cmake protobuf-compiler + + - name: Free up space on runner + shell: bash + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + - name: Rust Setup + shell: bash + run: | + rustup toolchain install stable --profile minimal --component rustfmt clippy + rustup default stable + rustup target add wasm32-unknown-unknown \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..47337a82 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,125 @@ +name: Build, test and lint + +on: + push: + branches: [ main ] + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup worker + uses: "./.github/templates/setup-worker" + with: + rust-components: rustfmt + + - name: Check formatting + run: cargo +stable fmt --all -- --check + + check: + needs: lint + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup worker + uses: "./.github/templates/setup-worker" + + - name: Cache Build artefacts + uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-release-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo-release + + - name: Rust Cache + uses: Swatinem/rust-cache@v2.5.0 + with: + cache-on-failure: true + cache-all-crates: true + + - name: Check Build + run: | + cargo check --release --locked --features=runtime-benchmarks + + clippy: + needs: lint + runs-on: ubuntu-latest + env: + SKIP_WASM_BUILD: 1 + steps: + - name: Free up space on runner + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + + - uses: actions/checkout@v3 + + - name: Setup worker + uses: "./.github/templates/setup-worker" + + - name: Cache Build artefacts + uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-clippy-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo-clippy + + - name: Annotate with Clippy warnings + uses: actions-rs/clippy-check@v1 + with: + token: ${{ secrets.GITHUB_TOKEN }} + args: --release --locked --features=runtime-benchmarks + + test: + needs: lint + runs-on: ubuntu-latest + steps: + # Tests with benchmarks require a lot of disk space + - name: Free Disk Space (Ubuntu) + uses: jlumbroso/free-disk-space@main + with: + android: true + dotnet: true + haskell: true + large-packages: false + swap-storage: false + + - uses: actions/checkout@v3 + + - name: Setup worker + uses: "./.github/templates/setup-worker" + + - name: Cache Build artefacts + uses: actions/cache@v3 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + target/ + key: ${{ runner.os }}-cargo-debug-${{ hashFiles('**/Cargo.lock') }} + restore-keys: ${{ runner.os }}-cargo-debug + + - name: Run tests + run: cargo test --release --locked --verbose --all + + - name: Check try-runtime build + run: cargo check --release --features=try-runtime