Skip to content

Commit

Permalink
Migrate GitLab CI to GitHub Actions (#729)
Browse files Browse the repository at this point in the history
* Migrate GitLab CI to GitHub Actions

* staking-miner-v2 to polkadot-staking-miner

* Update .github/workflows/ci.yml

Co-authored-by: Alexander Samusev <[email protected]>

* add environment

* fix docker login condition

* apply suggestions and split test and prod docker image build

* fix nightly naming

---------

Co-authored-by: Alexander Samusev <[email protected]>
  • Loading branch information
sergejparity and alvicsam authored Dec 18, 2023
1 parent 4c80181 commit 585194c
Show file tree
Hide file tree
Showing 7 changed files with 345 additions and 51 deletions.
2 changes: 1 addition & 1 deletion .github/issue_templates/nightly_run_failed.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Go to [job logs]({{ env.FAILED_WORKFLOW_RUN_URL }}) to see details about the failure.
262 changes: 262 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -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
22 changes: 0 additions & 22 deletions .github/workflows/gitspiegel-trigger.yml

This file was deleted.

67 changes: 47 additions & 20 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Loading

0 comments on commit 585194c

Please sign in to comment.