Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate GitLab CI to GitHub Actions #729

Merged
merged 8 commits into from
Dec 18, 2023
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
226 changes: 226 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
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 +nightly check --manifest-path staking-miner-playground/Cargo.toml
sergejparity marked this conversation as resolved.
Show resolved Hide resolved

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

publish:
name: Build/publish Docker image
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: Prepare Docker environment
run: |
if [[ ${{ github.ref }} == 'refs/heads/main' ]] || [[ ${{ github.ref_type }} == 'tag' ]]; then
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 }}!"
else
echo IMAGE_TAG=stub_tag >> $GITHUB_ENV
echo PUSH_IMAGE=false >> $GITHUB_ENV
echo "Docker image will not be published. Just testing if the build works."
fi
chmod +x ./artifacts/polkadot-staking-miner

- name: Log in to Docker Hub
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/Push Docker image
uses: docker/build-push-action@v5
with:
push: ${{ env.PUSH_IMAGE }}
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.

69 changes: 48 additions & 21 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
name: Nightly test

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
Copy link
Member

@niklasad1 niklasad1 Dec 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sergejparity

Do think it would be easy to cache these binaries similar to what https://github.com/paritytech/subxt/blob/master/.github/workflows/build-substrate.yml does?

We might be able to enable this in the CI instead of running it every night then...

The staking-miner-playaround is rarely changed and it might be possible to cache and only rebuild it if the versions doesn't match...

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
24 changes: 24 additions & 0 deletions .github/workflows/publish-docker-description.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Publish Docker image description

on:
push:
branches:
- 'main'
paths:
- 'Dockerfile.README.md'

jobs:
publish_docker_description:
runs-on: ubuntu-latest
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'
Loading
Loading