diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e73f90359..64f63971d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,9 +1,11 @@ name: CI on: - # push: - # branches: - # - master + push: + branches: + - master + tags: + - v* pull_request: types: [opened, synchronize, reopened, ready_for_review] @@ -17,22 +19,38 @@ env: CI_IMAGE: "paritytech/ci-unified:bullseye-1.81.0-2024-09-11-v202409111034" jobs: - set-image: - # This workaround sets the container image for each job using 'set-image' job output. + set-variables: + # This workaround sets the container image for each job using 'set-variables' job output. # env variables don't work for PR from forks, so we need to use outputs. runs-on: ubuntu-latest outputs: CI_IMAGE: ${{ steps.set_image.outputs.CI_IMAGE }} + VERSION: ${{ steps.version.outputs.VERSION }} steps: - - id: set_image + - name: Set image + id: set_image run: echo "CI_IMAGE=${{ env.CI_IMAGE }}" >> $GITHUB_OUTPUT + - name: Define version + id: version + run: | + export COMMIT_SHA=${{ github.sha }} + export COMMIT_SHA_SHORT=${COMMIT_SHA:0:8} + export REF_NAME=${{ github.ref_name }} + export REF_SLUG=${REF_NAME//\//_} + if [[ ${REF_SLUG} == "master" ]] + then + echo "VERSION=${REF_SLUG}-${COMMIT_SHA_SHORT}" >> $GITHUB_OUTPUT + else + echo "VERSION=${REF_SLUG}" >> $GITHUB_OUTPUT + fi + echo "set VERSION=${VERSION}" fmt: name: Cargo fmt runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -40,14 +58,14 @@ jobs: - name: Cargo fmt run: cargo +nightly fmt --all -- --check + # todo: fixme clippy: name: Clippy runs-on: ubuntu-latest - needs: [set-image] - # todo: fixme + needs: [set-variables] continue-on-error: true container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -58,9 +76,9 @@ jobs: spellcheck: name: Spellcheck runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -68,12 +86,13 @@ jobs: - name: Spellcheck run: cargo spellcheck check --cfg=.config/spellcheck.toml --checkers hunspell -m 1 $(find . -type f -name '*.rs' ! -path "./target/*" ! -name 'codegen_runtime.rs' ! -name 'weights.rs') + # todo: fixme check: name: Check runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -90,9 +109,9 @@ jobs: test: name: Test runs-on: parity-large - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -112,9 +131,9 @@ jobs: deny: name: Deny runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} # this job is allowed to fail, only licenses check is important continue-on-error: true steps: @@ -129,9 +148,9 @@ jobs: deny-licenses: name: Deny License runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -142,9 +161,9 @@ jobs: check-rustdocs: name: Check Rustdocs runs-on: ubuntu-latest - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -158,27 +177,12 @@ jobs: - name: Check Rustdocs run: cargo doc --no-deps --all --workspace --document-private-items - partial-repo-pallets-build-test: - name: Partial repo pallets build test - runs-on: ubuntu-latest - needs: [set-image] - # we may live with failing partial repo build, it is just a signal for us - continue-on-error: true - container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} - steps: - - name: Checkout sources - uses: actions/checkout@v4 - - - name: Partial repo pallets build test - run: ./scripts/verify-pallets-build.sh --no-revert - build: name: Build runs-on: parity-large - needs: [set-image] + needs: [set-variables] container: - image: ${{ needs.set-image.outputs.CI_IMAGE }} + image: ${{ needs.set-variables.outputs.CI_IMAGE }} steps: - name: Checkout sources uses: actions/checkout@v4 @@ -189,12 +193,49 @@ jobs: cache-on-failure: true cache-all-crates: true - - name: Build + - name: Build and pack artifact run: | cargo fetch CARGO_NET_OFFLINE=true time cargo build --release --workspace + mkdir -p ./artifacts + strip ./target/release/substrate-relay + mv -v ./target/release/substrate-relay ./artifacts/ + mv -v ./deployments/local-scripts/bridge-entrypoint.sh ./artifacts/ + mv -v ./ci.Dockerfile ./artifacts/ + + - name: upload artifacts + uses: actions/upload-artifact@v4 + with: + name: ${{ github.job }}-${{ github.sha }} + path: artifacts + retention-days: 1 + + build_docker: + name: Build docker image + runs-on: ubuntu-latest + needs: [set-variables] + env: + VERSION: ${{ needs.set-variables.outputs.VERSION }} + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Download artifacts + uses: actions/download-artifact@v2 + with: + name: build-${{ github.sha }} + + - name: Build Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: ./ci.Dockerfile + push: false + # build-args: + tags: | + docker.io/paritytech/substrate-relay:${{ env.VERSION }} + docker.io/paritytech/bridges-common-relay:${{ env.VERSION }} - #todo: collect artifacts #build image substrate-relay #build image bridges-common-relay #build and push image substrate-relay diff --git a/ci.Dockerfile b/ci.Dockerfile index b419f6be54..6ec22d5c0c 100644 --- a/ci.Dockerfile +++ b/ci.Dockerfile @@ -8,16 +8,16 @@ ENV RUST_BACKTRACE 1 ENV DEBIAN_FRONTEND=noninteractive RUN set -eux; \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - curl ca-certificates libssl-dev && \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + curl ca-certificates libssl-dev && \ update-ca-certificates && \ - groupadd -g 1000 user && \ - useradd -u 1000 -g user -s /bin/sh -m user && \ - # apt clean up - apt-get autoremove -y && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* + groupadd -g 1000 user && \ + useradd -u 1000 -g user -s /bin/sh -m user && \ + # apt clean up + apt-get autoremove -y && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* # switch to non-root user USER user @@ -29,6 +29,8 @@ ARG PROJECT=substrate-relay COPY --chown=user:user ./${PROJECT} ./ COPY --chown=user:user ./bridge-entrypoint.sh ./ +RUN echo ${PROJECT}} + # check if executable works in this container RUN ./${PROJECT} --version