Skip to content

ci: Upgrade actions/upload-artifact and actions/download-artifact to … #664

ci: Upgrade actions/upload-artifact and actions/download-artifact to …

ci: Upgrade actions/upload-artifact and actions/download-artifact to … #664

Workflow file for this run

name: Polkadot Staking Miner CI
on:
push:
branches:
- main
tags:
- v*
pull_request:
branches:
- main
env:
IMAGE: paritytech/ci-unified:bullseye-1.81.0-2024-09-11
IMAGE_NAME: paritytech/polkadot-staking-miner
RUST_INFO: rustup show && cargo --version && rustup +nightly show && cargo +nightly --version
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
set-image:
# GitHub Actions does not allow using 'env' in a container context.
# This workaround sets the container image for each job using 'set-image' job output.
runs-on: ubuntu-latest
outputs:
IMAGE: ${{ steps.set_image.outputs.IMAGE }}
steps:
- id: set_image
run: echo "IMAGE=${{ env.IMAGE }}" >> $GITHUB_OUTPUT
check-fmt:
name: Check formatting
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Check formatting
run: |
${{ env.RUST_INFO }}
cargo +nightly fmt --all -- --check
check-clippy:
name: Clippy
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
- name: Run Clippy
run: |
${{ env.RUST_INFO }}
cargo clippy --all-targets
check-docs:
name: Check documentation
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
- name: Check documentation
run: |
${{ env.RUST_INFO }}
RUSTDOCFLAGS="--cfg docsrs --deny rustdoc::broken_intra_doc_links" cargo doc --verbose --workspace --no-deps --document-private-items --all-features
check-cargo-hack:
name: Check code using cargo-hack
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
- name: Check code using cargo-hack
run: |
${{ env.RUST_INFO }}
cargo hack check --workspace --each-feature --all-targets
test:
name: Run tests
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get Polkadot and Staking Miner Playground binaries
uses: ./.github/workflows/actions/prepare-binaries
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
- name: Run tests on Ubuntu
run: |
${{ env.RUST_INFO }}
RUST_LOG=info cargo +stable test --workspace -- --nocapture
build:
name: Build polkadot-staking-miner binary
runs-on: ubuntu-latest
needs: [set-image]
container: ${{ needs.set-image.outputs.IMAGE }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Cache Rust dependencies
uses: swatinem/rust-cache@v2
with:
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
- name: Build staking-miner
run: |
${{ env.RUST_INFO }}
cargo build --release --locked
- name: Move polkadot-staking-miner binary
run: mv ./target/release/polkadot-staking-miner .
- name: Collect artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: |
./polkadot-staking-miner
./Dockerfile
build-docker-image:
name: Test Docker image build
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
needs: [check-fmt, check-clippy, check-docs, check-cargo-hack, test, build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
path: ./artifacts
- name: Set permissions
run: chmod +x ./artifacts/polkadot-staking-miner
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build Docker image
uses: docker/build-push-action@v6
with:
push: false
context: ./artifacts
file: ./artifacts/Dockerfile
build-args: |
VCS_REF="${{ github.sha }}"
BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
tags: |
${{ env.IMAGE_NAME }}:test
publish-docker-image:
name: Build and publish Docker image
if: ${{ github.ref == 'refs/heads/main' || github.ref_type == 'tag' }}
runs-on: ubuntu-latest
environment: main_and_tags
needs: [check-fmt, check-clippy, check-docs, check-cargo-hack, test, build]
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: build-artifacts
path: ./artifacts
- name: Prepare Docker environment
run: |
echo IMAGE_TAG=$(if [ "$GITHUB_REF" == "refs/heads/main" ]; then echo "main-${GITHUB_SHA::7}"; else echo "$GITHUB_REF_NAME"; fi) >> $GITHUB_ENV
echo PUSH_IMAGE=true >> $GITHUB_ENV
echo "Docker image will be published with the tag: ${{ env.IMAGE_TAG }}!"
chmod +x ./artifacts/polkadot-staking-miner
- name: Log in to Docker Hub
if: ${{ github.ref == 'refs/heads/main' || github.ref_type == 'tag' }}
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
uses: docker/build-push-action@v6
with:
push: true
context: ./artifacts
file: ./artifacts/Dockerfile
build-args: |
VCS_REF="${{ github.sha }}"
BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
tags: |
${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
${{ env.IMAGE_NAME }}:latest