diff --git a/.github/issue_templates/nightly_run_failed.md b/.github/issue_templates/nightly_run_failed.md index ab66f95a9..06a299114 100644 --- a/.github/issue_templates/nightly_run_failed.md +++ b/.github/issue_templates/nightly_run_failed.md @@ -2,4 +2,4 @@ title: staking-miner integration tests failed against latest polkadot build. --- -Go to {{ env.GITLAB_PIPELINE_URL }} to see details about the failure. \ No newline at end of file +Go to [job logs]({{ env.FAILED_WORKFLOW_RUN_URL }}) to see details about the failure. \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..14cd6c0a1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,262 @@ +name: Polkadot Staking Miner CI + +on: + push: + branches: + - main + tags: + - v* + pull_request: + branches: + - main + +env: + IMAGE: paritytech/ci-unified:bullseye-1.74.0-2023-11-01-v20231204 + 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 + + check-staking-miner-playground: + name: Check staking-miner-playground + 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 staking-miner-playground + run: | + ${{ env.RUST_INFO }} + cargo check --manifest-path staking-miner-playground/Cargo.toml + + 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: 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 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@v3 + 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, + check-staking-miner-playground, + test, + build] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v3 + 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@v5 + 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, + check-staking-miner-playground, + test, + build] + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v3 + 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@v5 + 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 diff --git a/.github/workflows/gitspiegel-trigger.yml b/.github/workflows/gitspiegel-trigger.yml deleted file mode 100644 index dce3aaf2f..000000000 --- a/.github/workflows/gitspiegel-trigger.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: gitspiegel sync - -# This workflow doesn't do anything, it's only use is to trigger "workflow_run" -# webhook, that'll be consumed by gitspiegel -# This way, gitspiegel won't do mirroring, unless this workflow runs, -# and running the workflow is protected by GitHub - -on: - pull_request: - types: - - opened - - synchronize - - unlocked - - ready_for_review - - reopened - -jobs: - sync: - runs-on: ubuntu-latest - steps: - - name: Do nothing - run: echo "let's go" diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 43b63f213..1e96dadd4 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,34 +1,64 @@ name: Daily compatibility check against latest polkadot on: + schedule: + - cron: '0 0 * * *' workflow_dispatch: - inputs: - gitlab_pipeline: - description: 'Link to failed pipeline' - required: true - gitlab_test_job_status: - description: 'GitLab test job status' - required: true jobs: - announce-status: + nightly-test: runs-on: ubuntu-latest - steps: - - name: Announce a status - run: echo ${{ inputs.gitlab_test_job_status }} - create-an-issue: - if: ${{ inputs.gitlab_test_job_status == 'failed' }} - runs-on: ubuntu-latest steps: - - name: Checkout staking-miner sources + - name: Checkout repository uses: actions/checkout@v4 - - name: Create an issue + - name: Free space on the runner + run: | + df -h + sudo apt -y autoremove --purge + sudo apt -y autoclean + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + df -h + + - name: Cache Rust dependencies + uses: swatinem/rust-cache@v2 + with: + key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }} + cache-on-failure: true + + - name: Run nightly tests + run: | + sudo apt install -y protobuf-compiler + rustup target add wasm32-unknown-unknown + rustup component add rust-src + git clone -b master --depth 1 https://github.com/paritytech/polkadot-sdk.git polkadot-sdk + cd polkadot-sdk + cargo build -p polkadot --release --features fast-runtime + mkdir -p ~/.local/bin + sudo mv ./target/release/polkadot /usr/bin + sudo mv ./target/release/polkadot-execute-worker /usr/bin + sudo mv ./target/release/polkadot-prepare-worker /usr/bin + polkadot --version + cd - + rm -rf polkadot + cd staking-miner-playground + cargo build --release --features test-trimming + sudo mv ./target/release/staking-miner-playground /usr/bin + staking-miner-playground --version + cd - + RUST_LOG=info cargo test --workspace --all-features -- --nocapture + cargo clean + + - name: Create an issue on failure + if: failure() uses: JasonEtco/create-an-issue@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - GITLAB_PIPELINE_URL: ${{ inputs.gitlab_pipeline }} + FAILED_WORKFLOW_RUN_URL: https://github.com/${{ github.repository }}/commit/${{ github.sha }}/checks/${{ github.run_id }} with: # Use this issue template: filename: .github/issue_templates/nightly_run_failed.md @@ -38,6 +68,3 @@ jobs: # Look for new *open* issues in this search (we want to # create a new one if we only find closed versions): search_existing: open - - - name: Fail workflow if tests failed - run: exit 1 diff --git a/.github/workflows/publish-docker-description.yml b/.github/workflows/publish-docker-description.yml new file mode 100644 index 000000000..d479fe870 --- /dev/null +++ b/.github/workflows/publish-docker-description.yml @@ -0,0 +1,25 @@ +name: Publish Docker image description + +on: + push: + branches: + - 'main' + paths: + - 'Dockerfile.README.md' + +jobs: + publish_docker_description: + runs-on: ubuntu-latest + environment: main_and_tags + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Docker Hub Description + uses: paritytech-actions/dockerhub-description@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + repository: 'paritytech/polkadot-staking-miner' + short-description: 'polkadot-staking-miner' + readme-filepath: 'Dockerfile.README.md' \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 632edb636..b72907c0e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,9 +6,9 @@ ARG BUILD_DATE LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ - io.parity.image.title="staking-miner-v2" \ - io.parity.image.description="Staking Miner v2 for substrate based chains" \ - io.parity.image.source="https://github.com/paritytech/staking-miner-v2/blob/${VCS_REF}/Dockerfile" \ + io.parity.image.title="polkadot-staking-miner" \ + io.parity.image.description="Polkadot staking miner for substrate based chains" \ + io.parity.image.source="https://github.com/paritytech/polkadot-staking-miner/blob/${VCS_REF}/Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" @@ -28,7 +28,7 @@ RUN apt-get update && \ useradd -u 10000 -U -s /bin/sh miner # add binary to docker image -COPY ./staking-miner /usr/local/bin +COPY ./polkadot-staking-miner /usr/local/bin USER miner @@ -37,6 +37,6 @@ ENV URI="wss://rpc.polkadot.io" ENV RUST_LOG="info" # check if the binary works in this container -RUN /usr/local/bin/staking-miner --version +RUN /usr/local/bin/polkadot-staking-miner --version -ENTRYPOINT [ "/usr/local/bin/staking-miner" ] +ENTRYPOINT [ "/usr/local/bin/polkadot-staking-miner" ] diff --git a/Dockerfile.README.md b/Dockerfile.README.md index 609bcf882..0b8f2c9fb 100644 --- a/Dockerfile.README.md +++ b/Dockerfile.README.md @@ -1,3 +1,5 @@ -# staking-miner-v2 +# Polkadot Staking Miner -[GitHub](https://github.com/paritytech/staking-miner-v2) \ No newline at end of file +[GitHub](https://github.com/paritytech/polkadot-staking-miner) + +Formerly known as `staking-miner-v2` historical images versions are available in the [hub.docker.com](https://hub.docker.com/r/paritytech/staking-miner-v2) \ No newline at end of file