From d9c6dd3c60cb03c389b11fc50c26a473f4d47478 Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Mon, 2 Mar 2026 15:02:23 +0300 Subject: [PATCH] refactor(ci): decouple from upstream Parity infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Parity-specific infrastructure dependencies with Pezkuwi's own: - S3 release uploads → GitHub Releases (gh CLI) - parity-zombienet runner labels → pezkuwi-runner - Grafana/Loki log URLs → disabled (use GH artifacts) - Matrix notifications → disabled (pending Pezkuwi Matrix) - paritytech issue links → pezkuwi tracking issues - paritytech Docker image refs → pezkuwi-sdk-frame in cmd.py - Add mirror-ci-image.yml workflow for GHCR image mirroring - Document upstream shared tools (resolc, try-runtime, evm-test-suite) --- .github/actions/zombienet-sdk/action.yml | 2 +- .github/actions/zombienet/action.yml | 2 +- .github/scripts/check-each-crate.py | 2 +- .github/scripts/cmd/cmd.py | 8 +- .github/scripts/common/lib.sh | 38 ++------ .github/scripts/process-logs-zombienet.sh | 5 +- .github/scripts/release/release_lib.sh | 89 +++++++------------ .github/workflows/check-runtime-migration.yml | 1 + .github/workflows/mirror-ci-image.yml | 41 +++++++++ .../workflows/release-reusable-rc-build.yml | 1 + .github/workflows/tests-evm.yml | 2 + .github/workflows/tests-misc.yml | 1 + .github/zombienet-env | 22 ++--- 13 files changed, 107 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/mirror-ci-image.yml diff --git a/.github/actions/zombienet-sdk/action.yml b/.github/actions/zombienet-sdk/action.yml index 9fbebff8..f7f0dab0 100644 --- a/.github/actions/zombienet-sdk/action.yml +++ b/.github/actions/zombienet-sdk/action.yml @@ -95,7 +95,7 @@ runs: else export RUN_IN_CI=1 # no need to check other runner variables. for k8s they shall store the same value - if [[ $ZOMBIENET_SDK_DEFAULT_RUNNER == "parity-zombienet" ]]; then + if [[ $ZOMBIENET_SDK_DEFAULT_RUNNER == "pezkuwi-runner" ]]; then export ZOMBIE_K8S_CI_NAMESPACE=$(cat /data/namespace) fi fi diff --git a/.github/actions/zombienet/action.yml b/.github/actions/zombienet/action.yml index e2d8f929..3b2be83b 100644 --- a/.github/actions/zombienet/action.yml +++ b/.github/actions/zombienet/action.yml @@ -93,7 +93,7 @@ runs: "$TEST_DEFINITION" else # no need to check other runner variables. for k8s they shall store the same value - if [[ $ZOMBIENET_DEFAULT_RUNNER == "parity-zombienet" ]]; then + if [[ $ZOMBIENET_DEFAULT_RUNNER == "pezkuwi-runner" ]]; then export ZOMBIE_K8S_CI_NAMESPACE=$(cat /data/namespace) fi diff --git a/.github/scripts/check-each-crate.py b/.github/scripts/check-each-crate.py index 9479222d..bed8bc6a 100755 --- a/.github/scripts/check-each-crate.py +++ b/.github/scripts/check-each-crate.py @@ -3,7 +3,7 @@ # A script that checks each workspace crate individually. # It's relevant to check workspace crates individually because otherwise their compilation problems # due to feature misconfigurations won't be caught, as exemplified by -# https://github.com/paritytech/substrate/issues/12705 +# https://github.com/pezkuwichain/pezkuwi-sdk/issues/163 (upstream tracking) # # `check-each-crate.py target_group groups_total` # diff --git a/.github/scripts/cmd/cmd.py b/.github/scripts/cmd/cmd.py index 1779526e..acb0fd3b 100755 --- a/.github/scripts/cmd/cmd.py +++ b/.github/scripts/cmd/cmd.py @@ -21,7 +21,7 @@ runtimeNames = list(map(lambda x: x['name'], runtimesMatrix)) common_args = { '--quiet': {"action": "store_true", "help": "Won't print start/end/failed messages in PR"}, '--clean': {"action": "store_true", "help": "Clean up the previous bot's & author's comments in PR"}, - '--image': {"help": "Override docker image '--image docker.io/paritytech/ci-unified:latest'"}, + '--image': {"help": "Override docker image '--image ghcr.io/pezkuwichain/ci-unified:latest'"}, } def print_and_log(message, output_file='/tmp/cmd/command_output.log'): @@ -414,7 +414,7 @@ def main(): print(f'-- config: {config}') if runtime == 'dev': - # to support sub-modules (https://github.com/paritytech/command-bot/issues/275) + # to support sub-modules search_manifest_path = f"cargo metadata --locked --format-version 1 --no-deps | jq -r '.packages[] | select(.name == \"{pallet.replace('_', '-')}\") | .manifest_path'" print(f'-- running: {search_manifest_path}') manifest_path = os.popen(search_manifest_path).read() @@ -427,9 +427,9 @@ def main(): print(f'-- package_dir: {package_dir}') print(f'-- manifest_path: {manifest_path}') output_path = os.path.join(package_dir, "src", "weights.rs") - # TODO: we can remove once all pallets in dev runtime are migrated to polkadot-sdk-frame + # TODO: we can remove once all pallets in dev runtime are migrated to pezkuwi-sdk-frame try: - uses_polkadot_sdk_frame = "true" in os.popen(f"cargo metadata --locked --format-version 1 --no-deps | jq -r '.packages[] | select(.name == \"{pallet.replace('_', '-')}\") | .dependencies | any(.name == \"polkadot-sdk-frame\")'").read() + uses_polkadot_sdk_frame = "true" in os.popen(f"cargo metadata --locked --format-version 1 --no-deps | jq -r '.packages[] | select(.name == \"{pallet.replace('_', '-')}\") | .dependencies | any(.name == \"pezkuwi-sdk-frame\")'").read() print(f'uses_polkadot_sdk_frame: {uses_polkadot_sdk_frame}') # Empty output from the previous os.popen command except StopIteration: diff --git a/.github/scripts/common/lib.sh b/.github/scripts/common/lib.sh index b76e8b26..fe4f6cbb 100755 --- a/.github/scripts/common/lib.sh +++ b/.github/scripts/common/lib.sh @@ -92,11 +92,13 @@ structure_message() { # Post a message to a matrix room # body: '{body: "JSON string produced by structure_message"}' -# room_id: !fsfSRjgjBWEWffws:matrix.parity.io +# room_id: Pezkuwi project Matrix room # access_token: see https://matrix.org/docs/guides/client-server-api/ # Usage: send_message $body (json formatted) $room_id $access_token +# NOTE: Update the Matrix homeserver URL when Pezkuwi Matrix is set up send_message() { - curl -XPOST -d "$1" "https://m.parity.io/_matrix/client/r0/rooms/$2/send/m.room.message?access_token=$3" + echo "::warning::Matrix notification skipped - no Pezkuwi Matrix server configured yet" + # curl -XPOST -d "$1" "https://matrix.pezkuwi.io/_matrix/client/r0/rooms/$2/send/m.room.message?access_token=$3" } # Pretty-printing functions @@ -144,7 +146,7 @@ has_runtime_changes() { # with only the bootnode specified and test whether that bootnode provides peers # The optional third argument is the index of the bootnode in the list of bootnodes, this is just used to pick an ephemeral # port for the node to run on. If you're only testing one, it'll just use the first ephemeral port -# BOOTNODE: /dns/pezkuwi-connect-0.parity.io/tcp/443/wss/p2p/12D3KooWEPmjoRpDSUuiTjvyNDd8fejZ9eNWH5bE965nyBMDrB4o +# BOOTNODE: Pezkuwi bootnode address (to be configured for mainnet) # CHAINSPEC_FILE: /path/to/pezkuwi.json check_bootnode(){ BOOTNODE=$1 @@ -332,34 +334,10 @@ fetch_release_artifacts_from_s3() { } # Pass the name of the binary as input, it will -# return the s3 base url +# return the release download base URL (GitHub Releases) function get_s3_url_base() { - name=$1 - case $name in - pezkuwi | pezkuwi-execute-worker | pezkuwi-prepare-worker ) - printf "https://releases.parity.io/pezkuwi" - ;; - - pezkuwi-teyrchain) - printf "https://releases.parity.io/pezkuwi-teyrchain" - ;; - - pezkuwi-omni-node) - printf "https://releases.parity.io/pezkuwi-omni-node" - ;; - - chain-spec-builder) - printf "https://releases.parity.io/chain-spec-builder" - ;; - - frame-omni-bencher) - printf "https://releases.parity.io/frame-omni-bencher" - ;; - *) - printf "UNSUPPORTED BINARY $name" - exit 1 - ;; - esac + # All binaries served from GitHub Releases + printf "https://github.com/pezkuwichain/pezkuwi-sdk/releases/download" } diff --git a/.github/scripts/process-logs-zombienet.sh b/.github/scripts/process-logs-zombienet.sh index 4c82bb6b..00f3b52b 100755 --- a/.github/scripts/process-logs-zombienet.sh +++ b/.github/scripts/process-logs-zombienet.sh @@ -4,8 +4,9 @@ set -euo pipefail # This script processes logs produced by nodes spawned using the zombienet-sdk framework. # The logs are prepared for upload as GitHub artifacts. # If Loki logging is available, the corresponding log URLs are also printed. -# NOTE: P2838773B5F7DE937 is the loki.cicd until we switch to loki.zombienet -LOKI_URL_FOR_NODE='https://grafana.teleport.parity.io/explore?orgId=1&left=%7B%22datasource%22:%22P2838773B5F7DE937%22,%22queries%22:%5B%7B%22refId%22:%22A%22,%22datasource%22:%7B%22type%22:%22loki%22,%22uid%22:%22P2838773B5F7DE937%22%7D,%22editorMode%22:%22code%22,%22expr%22:%22%7Bzombie_ns%3D%5C%22{{namespace}}%5C%22,zombie_node%3D%5C%22{{podName}}%5C%22%7D%22,%22queryType%22:%22range%22%7D%5D,%22range%22:%7B%22from%22:%22{{from}}%22,%22to%22:%22{{to}}%22%7D%7D' +# NOTE: Loki URL disabled - Pezkuwi does not use external Grafana. +# Zombienet logs are available as GitHub Actions artifacts. +LOKI_URL_FOR_NODE='' LOKI_DIR_FOR_NATIVE_LOGS="/tmp/zombienet" diff --git a/.github/scripts/release/release_lib.sh b/.github/scripts/release/release_lib.sh index dc7e28ca..6034d533 100644 --- a/.github/scripts/release/release_lib.sh +++ b/.github/scripts/release/release_lib.sh @@ -118,9 +118,12 @@ set_pezkuwi_teyrchain_binary_version() { } +# Upload release artifacts to GitHub Releases using gh CLI. +# Pezkuwi SDK uses GitHub Releases instead of external S3 buckets. +# +# input: product, version, target +# output: none upload_s3_release() { - alias aws='podman run --rm -it docker.io/paritytech/awscli -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_BUCKET aws' - product=$1 version=$2 target=$3 @@ -129,78 +132,50 @@ upload_s3_release() { echo "Working on version: $version " echo "Working on platform: $target " - URL_BASE=$(get_s3_url_base $product) - - echo "Current content, should be empty on new uploads:" - aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize || true - echo "Content to be uploaded:" artifacts="release-artifacts/$target/$product/" + echo "Content to be uploaded:" ls "$artifacts" - aws s3 sync --acl public-read "$artifacts" "s3://${URL_BASE}/${version}/${target}" - echo "Uploaded files:" - aws s3 ls "s3://${URL_BASE}/${version}/${target}" --recursive --human-readable --summarize - echo "✅ The release should be at https://${URL_BASE}/${version}/${target}" + + # Upload each artifact to the GitHub Release + for file in "$artifacts"/*; do + [ -f "$file" ] || continue + echo "Uploading: $file" + gh release upload "$version" "$file" --clobber || true + done + + echo "✅ Release artifacts uploaded to https://github.com/pezkuwichain/pezkuwi-sdk/releases/tag/${version}" } -# Upload runtimes artifacts to s3 release bucket +# Upload runtimes artifacts to GitHub Releases. # # input: version (stable release tag e.g. pezkuwi-stable2412 or pezkuwi-stable2412-rc1) # output: none upload_s3_runtimes_release_artifacts() { - alias aws='podman run --rm -it docker.io/paritytech/awscli -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_BUCKET aws' - version=$1 echo "Working on version: $version " - echo "Current content, should be empty on new uploads:" - aws s3 ls "s3://releases.parity.io/pezkuwi/runtimes/${version}/" --recursive --human-readable --summarize || true - echo "Content to be uploaded:" artifacts="artifacts/runtimes/" + echo "Content to be uploaded:" ls "$artifacts" - aws s3 sync --acl public-read "$artifacts" "s3://releases.parity.io/pezkuwi/runtimes/${version}/" - echo "Uploaded files:" - aws s3 ls "s3://releases.parity.io/pezkuwi/runtimes/${version}/" --recursive --human-readable --summarize - echo "✅ The release should be at https://releases.parity.io/pezkuwi/runtimes/${version}" + + # Create release if it doesn't exist + gh release view "$version" &>/dev/null || \ + gh release create "$version" --title "$version" --notes "Runtime release $version" --draft + + for file in "$artifacts"/*; do + [ -f "$file" ] || continue + echo "Uploading: $file" + gh release upload "$version" "$file" --clobber || true + done + + echo "✅ Runtimes uploaded to https://github.com/pezkuwichain/pezkuwi-sdk/releases/tag/${version}" } # Pass the name of the binary as input, it will -# return the s3 base url +# return the GitHub release download base URL function get_s3_url_base() { - name=$1 - case $name in - pezkuwi | pezkuwi-execute-worker | pezkuwi-prepare-worker ) - printf "releases.parity.io/pezkuwi" - ;; - - pezkuwi-teyrchain) - printf "releases.parity.io/pezkuwi-teyrchain" - ;; - - pezkuwi-omni-node) - printf "releases.parity.io/pezkuwi-omni-node" - ;; - - chain-spec-builder) - printf "releases.parity.io/chain-spec-builder" - ;; - - frame-omni-bencher) - printf "releases.parity.io/frame-omni-bencher" - ;; - substrate-node) - printf "releases.parity.io/substrate-node" - ;; - eth-rpc) - printf "releases.parity.io/eth-rpc" - ;; - subkey) - printf "releases.parity.io/subkey" - ;; - *) - printf "UNSUPPORTED BINARY $name" - exit 1 - ;; - esac + # All binaries are now served from GitHub Releases + printf "github.com/pezkuwichain/pezkuwi-sdk/releases/download" } diff --git a/.github/workflows/check-runtime-migration.yml b/.github/workflows/check-runtime-migration.yml index 6bdf0959..30489bd2 100644 --- a/.github/workflows/check-runtime-migration.yml +++ b/.github/workflows/check-runtime-migration.yml @@ -85,6 +85,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Download CLI + # NOTE: try-runtime-cli is an upstream shared tool from paritytech/try-runtime-cli run: | curl -sL https://github.com/paritytech/try-runtime-cli/releases/download/v0.8.0/try-runtime-x86_64-unknown-linux-musl -o try-runtime chmod +x ./try-runtime diff --git a/.github/workflows/mirror-ci-image.yml b/.github/workflows/mirror-ci-image.yml new file mode 100644 index 00000000..cf659a1e --- /dev/null +++ b/.github/workflows/mirror-ci-image.yml @@ -0,0 +1,41 @@ +# Mirror upstream CI image to GHCR so we control our own build infrastructure. +# Runs manually or when .github/env changes (new CI image version). +name: Mirror CI Image + +on: + workflow_dispatch: + push: + branches: [main] + paths: [".github/env"] + +permissions: + packages: write + +jobs: + mirror: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + + - name: Read source image from env file + id: source + run: | + SOURCE_IMAGE=$(grep '^IMAGE=' .github/env | cut -d'"' -f2) + TAG=$(echo "$SOURCE_IMAGE" | cut -d: -f2) + echo "source=$SOURCE_IMAGE" >> "$GITHUB_OUTPUT" + echo "tag=$TAG" >> "$GITHUB_OUTPUT" + echo "Source: $SOURCE_IMAGE" + + - name: Log in to GHCR + uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Pull, tag, and push to GHCR + run: | + docker pull "${{ steps.source.outputs.source }}" + docker tag "${{ steps.source.outputs.source }}" "ghcr.io/pezkuwichain/ci-unified:${{ steps.source.outputs.tag }}" + docker push "ghcr.io/pezkuwichain/ci-unified:${{ steps.source.outputs.tag }}" + echo "Mirrored to ghcr.io/pezkuwichain/ci-unified:${{ steps.source.outputs.tag }}" diff --git a/.github/workflows/release-reusable-rc-build.yml b/.github/workflows/release-reusable-rc-build.yml index 26bedbeb..80d15e77 100644 --- a/.github/workflows/release-reusable-rc-build.yml +++ b/.github/workflows/release-reusable-rc-build.yml @@ -205,6 +205,7 @@ jobs: run: brew install solidity - name: Install resolc + # NOTE: resolc is an upstream shared tool from paritytech/revive (EVM compiler) run: | VERSION="0.3.0" ASSET_URL="https://github.com/paritytech/revive/releases/download/v$VERSION/resolc-universal-apple-darwin" diff --git a/.github/workflows/tests-evm.yml b/.github/workflows/tests-evm.yml index dd6c5d98..37eb1dc9 100644 --- a/.github/workflows/tests-evm.yml +++ b/.github/workflows/tests-evm.yml @@ -34,6 +34,7 @@ jobs: - name: Update the Installed Python run: apt-get update && apt-get install -y python3-pip python3 - name: Installing the Latest Resolc + # NOTE: resolc is an upstream shared tool from paritytech/revive (EVM compiler) run: | VERSION="0.5.0" ASSET_URL="https://github.com/paritytech/revive/releases/download/v$VERSION/resolc-x86_64-unknown-linux-musl" @@ -119,6 +120,7 @@ jobs: cargo build --locked --release -p pez-revive-dev-node --bin pez-revive-dev-node - name: Checkout evm-tests + # NOTE: evm-test-suite is an upstream shared test suite from paritytech uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: paritytech/evm-test-suite diff --git a/.github/workflows/tests-misc.yml b/.github/workflows/tests-misc.yml index 556b4076..18ba91b9 100644 --- a/.github/workflows/tests-misc.yml +++ b/.github/workflows/tests-misc.yml @@ -472,6 +472,7 @@ jobs: solc-select use 0.8.30 solc --version - name: Install resolc + # NOTE: resolc is an upstream shared tool from paritytech/revive (EVM compiler) run: | source $HOME/.cargo/env VERSION="0.5.0" diff --git a/.github/zombienet-env b/.github/zombienet-env index a7cecc75..ef36edb9 100644 --- a/.github/zombienet-env +++ b/.github/zombienet-env @@ -1,23 +1,23 @@ # zombienet settings ZOMBIENET_PROVIDER=native ZOMBIENET_IMAGE_FOR_NATIVE=docker.io/pezkuwichain/zombienet:v1.3.133 -ZOMBIENET_DEFAULT_RUNNER_FOR_NATIVE=parity-zombienet-native-default -ZOMBIENET_LARGE_RUNNER_FOR_NATIVE=parity-zombienet-native-large -ZOMBIENET_DEFAULT_RUNNER_FOR_NATIVE_PERSISTENT=parity-zombienet-native-default-persistent -ZOMBIENET_LARGE_RUNNER_FOR_NATIVE_PERSISTENT=parity-zombienet-native-large-persistent +ZOMBIENET_DEFAULT_RUNNER_FOR_NATIVE=pezkuwi-runner +ZOMBIENET_LARGE_RUNNER_FOR_NATIVE=pezkuwi-runner +ZOMBIENET_DEFAULT_RUNNER_FOR_NATIVE_PERSISTENT=pezkuwi-runner +ZOMBIENET_LARGE_RUNNER_FOR_NATIVE_PERSISTENT=pezkuwi-runner ZOMBIENET_IMAGE_FOR_K8S=docker.io/pezkuwichain/zombienet:v1.3.133 -ZOMBIENET_RUNNER_FOR_K8S=parity-zombienet +ZOMBIENET_RUNNER_FOR_K8S=pezkuwi-runner DEBUG=zombie,zombie::network-node,zombie::kube::client::logs # zombienet-sdk settings ZOMBIE_PROVIDER=native -ZOMBIENET_SDK_IMAGE_FOR_NATIVE=docker.io/pezkuwichain/ci-unified:bullseye-1.84.1-2025-01-28-v202502131220 -ZOMBIENET_SDK_DEFAULT_RUNNER_FOR_NATIVE=parity-zombienet-native-default -ZOMBIENET_SDK_LARGE_RUNNER_FOR_NATIVE=parity-zombienet-native-large -ZOMBIENET_SDK_DEFAULT_RUNNER_FOR_NATIVE_PERSISTENT=parity-zombienet-native-default-persistent -ZOMBIENET_SDK_LARGE_RUNNER_FOR_NATIVE_PERSISTENT=parity-zombienet-native-large-persistent +ZOMBIENET_SDK_IMAGE_FOR_NATIVE=ghcr.io/pezkuwichain/ci-unified:bullseye-1.88.0-2025-06-27-v202511141243 +ZOMBIENET_SDK_DEFAULT_RUNNER_FOR_NATIVE=pezkuwi-runner +ZOMBIENET_SDK_LARGE_RUNNER_FOR_NATIVE=pezkuwi-runner +ZOMBIENET_SDK_DEFAULT_RUNNER_FOR_NATIVE_PERSISTENT=pezkuwi-runner +ZOMBIENET_SDK_LARGE_RUNNER_FOR_NATIVE_PERSISTENT=pezkuwi-runner ZOMBIENET_SDK_IMAGE_FOR_K8S=docker.io/pezkuwichain/zombienet:v1.3.133 -ZOMBIENET_SDK_RUNNER_FOR_K8S=parity-zombienet +ZOMBIENET_SDK_RUNNER_FOR_K8S=pezkuwi-runner RUST_LOG=info,zombienet_orchestrator=trace,cumulus_zombienet_sdk_helpers=debug # common settings