Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Publish RC container images #7556

Merged
merged 52 commits into from
Aug 11, 2023
Merged
Show file tree
Hide file tree
Changes from 39 commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
4b86705
WIP
chevdor Jul 26, 2023
0e11440
Add missing checkout
chevdor Jul 26, 2023
6360aae
Add debuggin
chevdor Jul 26, 2023
ee06e5a
Fix VAR name
chevdor Jul 26, 2023
248d5b3
Bug fix
chevdor Jul 26, 2023
1065842
Rework jobs
chevdor Jul 27, 2023
03ba038
Revert "Rework jobs"
chevdor Jul 27, 2023
9ac9615
Add cache
chevdor Jul 27, 2023
2188167
Add temp default for testing
chevdor Jul 27, 2023
6ffdf27
Add missing checkout
chevdor Jul 27, 2023
ef777d0
Fix patch
chevdor Jul 27, 2023
1c2176a
Comment out the GPG check for now
chevdor Jul 28, 2023
b80f7f7
Rename polkadot_injected_release into a more appropriate polkadot_inj…
chevdor Jul 28, 2023
e66d4fd
Refactoring / renaming
chevdor Jul 28, 2023
6a546da
Introduce a generic image for binary injection
chevdor Aug 2, 2023
850dd21
Flag files to be deleted and changes to be done
chevdor Aug 2, 2023
d563357
WIP
chevdor Aug 2, 2023
892b36b
Fix multi binaries images
chevdor Aug 7, 2023
9546cfb
Add test build scripts
chevdor Aug 7, 2023
eeb13d2
Remove old file, add polkadot build-injected script
chevdor Aug 7, 2023
d295497
Fix doc
chevdor Aug 7, 2023
4b644dd
Fix tagging
chevdor Aug 8, 2023
9ca3a6a
Add build of the injected container
chevdor Aug 8, 2023
649133b
Fix for docker
chevdor Aug 8, 2023
8bfb0c2
Remove the need for TTY
chevdor Aug 8, 2023
8f6218f
Handling container publishing
chevdor Aug 8, 2023
7d3d386
Fix owner and registry
chevdor Aug 8, 2023
d9e166e
Fix vars
chevdor Aug 8, 2023
00758a6
Fix repo
chevdor Aug 8, 2023
4950fbf
Fix var naming
chevdor Aug 9, 2023
cdea409
Fix case when there is no tag
chevdor Aug 9, 2023
14ca5e1
Fix case with no tag
chevdor Aug 9, 2023
c26c28b
Handle error
chevdor Aug 9, 2023
ed5a075
Fix spacings
chevdor Aug 9, 2023
5795d6d
Fix tags
chevdor Aug 9, 2023
c6c8675
Remove unnecessary grep that may fail
chevdor Aug 9, 2023
6dfdb90
Add final check
chevdor Aug 9, 2023
b5ece41
Clean up and introduce GPG check
chevdor Aug 9, 2023
1534ff8
Add doc
chevdor Aug 9, 2023
b63c691
Add doc
chevdor Aug 10, 2023
e674630
Update doc/docker.md
chevdor Aug 10, 2023
cacb8fa
type
chevdor Aug 10, 2023
dd08468
Fix used VAR
chevdor Aug 10, 2023
1243527
Improve doc
chevdor Aug 10, 2023
5167e9e
ci: Update .build-push-image jobs to use the new build-injected.sh
Aug 10, 2023
c4852aa
ci: fix path to build-injected.sh script
Aug 10, 2023
cb805c1
Rename the release artifacts folder to prevent confusion due to a sim…
chevdor Aug 10, 2023
79ffc7a
ci: check out polkadot repo in .build-push-image
Aug 10, 2023
6e03f03
feat(build-injected.sh): make PROJECT_ROOT configurable
Aug 10, 2023
66e6618
ci: build injected images with buildah
Aug 10, 2023
b039d6e
ci: pass full image names to zombienet
Aug 10, 2023
34426d9
Add missing ignore
chevdor Aug 11, 2023
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/workflows/check-licenses.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- name: Checkout sources
uses: actions/checkout@v3.3.0
uses: actions/checkout@v3
- uses: actions/setup-node@v3.7.0
with:
node-version: '18.x'
Expand Down
131 changes: 131 additions & 0 deletions .github/workflows/release-40_publish-rc-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
name: Release - Publish RC Container image
# see https://github.com/paritytech/release-engineering/issues/97#issuecomment-1651372277

on:
workflow_dispatch:
inputs:
release_id:
description: |
Release ID.
You can find it using the command:
curl -s \
-H "Authorization: Bearer ${GITHUB_TOKEN}" https://api.github.com/repos/$OWNER/$REPO/releases | \
jq '.[] | { name: .name, id: .id }'
required: true
type: string
registry:
description: "Container registry"
required: true
type: string
default: docker.io
owner:
description: Owner of the container image repo
required: true
type: string
default: parity

env:
RELEASE_ID: ${{ inputs.release_id }}
ENGINE: docker
REGISTRY: ${{ inputs.registry }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DOCKER_OWNER: ${{ inputs.owner || github.repository_owner }}
REPO: ${{ github.repository }}

jobs:
fetch-artifacts:
runs-on: ubuntu-latest

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Fetch all artifacts
run: |
. ./scripts/ci/common/lib.sh
fetch_release_artifacts

- name: Cache the artifacts
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
with:
key: artifacts-${{ github.sha }}
path: |
artifacts/**/*

build-container:
runs-on: ubuntu-latest
needs: fetch-artifacts

strategy:
matrix:
binary: ["polkadot", "staking-miner"]

steps:
- name: Checkout sources
uses: actions/checkout@v3

- name: Get artifacts from cache
uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1
with:
key: artifacts-${{ github.sha }}
path: |
artifacts/**/*

- name: Check sha256 ${{ matrix.binary }}
working-directory: ./artifacts
run: |
. ../scripts/ci/common/lib.sh

echo "Checking binary ${{ matrix.binary }}"
check_sha256 ${{ matrix.binary }} && echo "OK" || echo "ERR"

- name: Check GPG ${{ matrix.binary }}
working-directory: ./artifacts
run: |
. ../scripts/ci/common/lib.sh
import_gpg_keys
check_gpg ${{ matrix.binary }}

- name: Fetch commit and tag
id: fetch_refs
run: |
release=release-${{ inputs.release_id }} && \
echo "release=${release}" >> $GITHUB_OUTPUT

commit=$(git rev-parse --short HEAD) && \
echo "commit=${commit}" >> $GITHUB_OUTPUT

tag=$(git name-rev --tags --name-only $(git rev-parse HEAD)) && \
[ "${tag}" != "undefined" ] && echo "tag=${tag}" >> $GITHUB_OUTPUT || \
echo "No tag, doing without"

- name: Build Injected Container image for ${{ matrix.binary }}
env:
BIN_FOLDER: artifacts
BINARY: ${{ matrix.binary }}
TAGS: ${{join(steps.fetch_refs.outputs.*, ',')}}
run: |
echo "Building container for ${{ matrix.binary }}"
./scripts/ci/dockerfiles/build-injected.sh

- name: Login to Dockerhub
uses: docker/login-action@v2
with:
username: ${{ inputs.owner }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Push Container image for ${{ matrix.binary }}
id: docker_push
env:
BINARY: ${{ matrix.binary }}
run: |
$ENGINE images | grep ${BINARY}
$ENGINE push --all-tags ${REGISTRY}/${DOCKER_OWNER}/${BINARY}

- name: Check version for the published image for ${{ matrix.binary }}
env:
BINARY: ${{ matrix.binary }}
RELEASE_TAG: ${{ steps.fetch_refs.outputs.release }}
run: |
echo "Checking tag ${RELEASE_TAG} for image ${REGISTRY}/${DOCKER_OWNER}/${BINARY}"
$ENGINE run -i ${REGISTRY}/${DOCKER_OWNER}/${BINARY}:${RELEASE_TAG} --version
2 changes: 1 addition & 1 deletion .github/workflows/release-50_publish-docker-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
uses: docker/build-push-action@v4
with:
push: true
file: scripts/ci/dockerfiles/polkadot_injected_release.Dockerfile
file: scripts/ci/dockerfiles/polkadot/polkadot_injected_debian.Dockerfile
tags: |
parity/polkadot:latest
parity/polkadot:${{ github.event.release.tag_name }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-51_publish-docker-manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
uses: docker/build-push-action@v4
with:
push: true
file: scripts/ci/dockerfiles/polkadot_injected_release.Dockerfile
file: scripts/ci/dockerfiles/polkadot/polkadot_injected_debian.Dockerfile
tags: |
parity/polkadot:latest
parity/polkadot:${{ github.event.inputs.version }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ polkadot.*
!polkadot.service
.DS_Store
.env

artifacts
release.json
69 changes: 69 additions & 0 deletions scripts/ci/common/lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -193,3 +193,72 @@ check_bootnode(){
echo " Bootnode appears unreachable"
return 1
}

# Assumes the ENV are set:
# - RELEASE_ID
# - GITHUB_TOKEN
# - REPO in the form paritytech/polkadot
fetch_release_artifacts() {
echo "Release ID : $RELEASE_ID"
echo "Repo : $REPO"

curl -L -s \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${GITHUB_TOKEN}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${REPO}/releases/$RELEASE_ID > release.json

# Get Asset ids
ids=($(jq -r '.assets[].id' < release.json ))
count=$(jq '.assets|length' < release.json )

# Fetch artifacts
mkdir -p artifacts
pushd artifacts > /dev/null

iter=1
for id in "${ids[@]}"
do
echo " - $iter/$count: downloading asset id: $id..."
curl -s -OJ -L -H "Accept: application/octet-stream" \
-H "Authorization: Token ${GITHUB_TOKEN}" \
"https://api.github.com/repos/${REPO}/releases/assets/$id"
iter=$((iter + 1))
done

ls -al --color
popd > /dev/null
}

# Check the checksum for a given binary
function check_sha256() {
echo "Checking SHA256 for $1"
shasum -qc $1.sha256
}

# Import GPG keys of the release team members
# This is done in parallel as it can take a while sometimes
function import_gpg_keys() {
GPG_KEYSERVER=${GPG_KEYSERVER:-"keyserver.ubuntu.com"}
SEC="9D4B2B6EB8F97156D19669A9FF0812D491B96798"
WILL="2835EAF92072BC01D188AF2C4A092B93E97CE1E2"
EGOR="E6FC4D4782EB0FA64A4903CCDB7D3555DD3932D3"
MARA="533C920F40E73A21EEB7E9EBF27AEA7E7594C9CF"
MORGAN="2E92A9D8B15D7891363D1AE8AF9E6C43F7F8C4CF"

echo "Importing GPG keys from $GPG_KEYSERVER in parallel"
for key in $SEC $WILL $EGOR $MARA $MORGAN; do
(
echo "Importing GPG key $key"
gpg --no-tty --quiet --keyserver $GPG_KEYSERVER --recv-keys $key
echo -e "5\ny\n" | gpg --no-tty --command-fd 0 --expert --edit-key $key trust;
) &
done
wait
}

# Check the GPG signature for a given binary
function check_gpg() {
echo "Checking GPG Signature for $1"
gpg --no-tty --verify -q $1.asc $1
}
13 changes: 13 additions & 0 deletions scripts/ci/dockerfiles/adder-collator/build-injected.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/usr/bin/env bash

# Sample call:
# $0 /path/to/folder_with_binary
# This script replace the former dedicated Dockerfile
# and shows how to use the generic binary_injected.dockerfile

PROJECT_ROOT=`git rev-parse --show-toplevel`

export BINARY=adder-collator,undying-collator
export BIN_FOLDER=$1

$PROJECT_ROOT/scripts/ci/dockerfiles/build-injected.sh
23 changes: 23 additions & 0 deletions scripts/ci/dockerfiles/adder-collator/test-build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
#!/usr/bin/env bash

TMP=$(mktemp -d)
ENGINE=${ENGINE:-podman}

# TODO: Switch to /bin/bash when the image is built from parity/base-bin

# Fetch some binaries
$ENGINE run --user root --rm -i \
--pull always \
-v "$TMP:/export" \
--entrypoint /usr/bin/bash \
paritypr/colander:master -c \
'cp "$(which adder-collator)" /export'

$ENGINE run --user root --rm -i \
--pull always \
-v "$TMP:/export" \
--entrypoint /usr/bin/bash \
paritypr/colander:master -c \
'cp "$(which undying-collator)" /export'

./build-injected.sh $TMP
48 changes: 48 additions & 0 deletions scripts/ci/dockerfiles/binary_injected.Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
FROM docker.io/parity/base-bin

# This file allows building a Generic container image
# based on one or multiple pre-built Linux binaries.
# Some defaults are set to polkadot but all can be overriden.

SHELL ["/bin/bash", "-c"]

# metadata
ARG VCS_REF
ARG BUILD_DATE
ARG IMAGE_NAME

# That can be a single one or a comma separated list
ARG BINARY=polkadot

ARG BIN_FOLDER=.
ARG DOC_URL=https://github.com/paritytech/polkadot
ARG DESCRIPTION="Polkadot: a platform for web3"
ARG AUTHORS="devops-team@parity.io"
ARG VENDOR="Parity Technologies"

LABEL io.parity.image.authors=${AUTHORS} \
io.parity.image.vendor="${VENDOR}" \
io.parity.image.revision="${VCS_REF}" \
io.parity.image.title="${IMAGE_NAME}" \
io.parity.image.created="${BUILD_DATE}" \
io.parity.image.documentation="${DOC_URL}" \
io.parity.image.description="${DESCRIPTION}" \
io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/ci/dockerfiles/binary_injected.Dockerfile"

USER root
WORKDIR /app

# add polkadot binary to docker image
# sample for polkadot: COPY ./polkadot ./polkadot-*-worker /usr/local/bin/
COPY entrypoint.sh .
COPY "bin/*" "/usr/local/bin/"
RUN chmod -R a+rx "/usr/local/bin"

USER parity
ENV BINARY=${BINARY}

# ENTRYPOINT
ENTRYPOINT ["/app/entrypoint.sh"]

# We call the help by default
CMD ["--help"]
Loading