diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9adc7e5971..02a064ec9d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -338,6 +338,7 @@ jobs: GITHUB_HUNTER_USERNAME=${{ secrets.HUNTER_USERNAME }} \ GITHUB_HUNTER_TOKEN=${{ secrets.HUNTER_TOKEN }} \ BUILDER_IMAGE_TAG=${{ env.BUILDER_LATEST_TAG }} \ + GIT_REF_NAME=${{ env.GIT_REF_NAME }} \ BUILD_TYPE=${{ matrix.options.build_type }} - name: "Push Kagome APT Package" diff --git a/README.md b/README.md index ab7b296a8b..ee81dffe57 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,33 @@ make debug_docker make clear ``` +### Installation from APT Package + +To install KAGOME releases using the provided package repository, follow these steps (tested on Ubuntu 24.04.1 LTS (Noble Numbat)): + +Update your package lists and install necessary utilities: + +```sh +apt update && apt install -y gpg curl +``` + +Add the repository’s GPG signing key: + +```sh +curl -fsSL https://europe-north1-apt.pkg.dev/doc/repo-signing-key.gpg | gpg --dearmor -o /usr/share/keyrings/europe-north-1-apt-archive-keyring.gpg +``` + +Add the KAGOME package repository to your sources list: +```sh +echo "deb [signed-by=/usr/share/keyrings/europe-north-1-apt-archive-keyring.gpg] https://europe-north1-apt.pkg.dev/projects/kagome-408211 kagome main" > /etc/apt/sources.list.d/kagome.list +``` + +Update the package lists and install KAGOME: + +```sh +apt update && apt install -y kagome +``` + ### Using KAGOME #### Obtaining database snapshot (optional) diff --git a/get_version.sh b/get_version.sh index 64ac9f12e4..107230db57 100755 --- a/get_version.sh +++ b/get_version.sh @@ -5,6 +5,10 @@ # SPDX-License-Identifier: Apache-2.0 # +sanitize_version() { + echo "$1" | sed -E 's/[^a-zA-Z0-9.+~:-]/-/g' +} + realpath() { if [ -d "$1" ]; then cd "$1" && pwd @@ -13,26 +17,31 @@ realpath() { fi } -cd $(dirname "$(realpath "$0")") +cd "$(dirname "$(realpath "$0")")" + +SANITIZED=false +if [ "$#" -gt 0 ] && [ "$1" = "--sanitized" ]; then + SANITIZED=true +fi if [ -x "$(which git 2>/dev/null)" ] && [ -e ".git" ]; then if [ -x "$(which sed 2>/dev/null)" ]; then HEAD=$(git rev-parse --short HEAD) COMMON=$(git merge-base HEAD master) - DESCR=$(git describe --tags --long ${COMMON}) + DESCR=$(git describe --tags --long "${COMMON}") if [ "$DESCR" = "" ]; then DESCR=$HEAD-0-g$HEAD fi - TAG_IN_MASTER=$(echo $DESCR | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\1/") - TAG_TO_FORK_DISTANCE=$(echo $DESCR | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\2/") + TAG_IN_MASTER=$(echo "$DESCR" | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\1/") + TAG_TO_FORK_DISTANCE=$(echo "$DESCR" | sed -E "s/v?(.*)-([0-9]+)-g[a-f0-9]+/\2/") BRANCH=$(git branch --show-current) if [ "$BRANCH" = "" ]; then BRANCH=$HEAD fi - FORK_TO_HEAD_DISTANCE=$(git rev-list --count ${COMMON}..HEAD) + FORK_TO_HEAD_DISTANCE=$(git rev-list --count "${COMMON}..HEAD") RESULT=$TAG_IN_MASTER if [ "$TAG_TO_FORK_DISTANCE" != "0" ]; then @@ -52,4 +61,8 @@ else RESULT="Unknown(no git)" fi -echo $RESULT +if [ "$SANITIZED" = true ]; then + RESULT=$(sanitize_version "$RESULT") +fi + +echo "$RESULT" \ No newline at end of file diff --git a/housekeeping/docker/kagome-dev/.gitignore b/housekeeping/docker/kagome-dev/.gitignore index a27562ecf5..20fe42fd77 100644 --- a/housekeeping/docker/kagome-dev/.gitignore +++ b/housekeeping/docker/kagome-dev/.gitignore @@ -1,6 +1,8 @@ *-versions.txt +*_version.txt commit_hash.txt + cumulus polkadot diff --git a/housekeeping/docker/kagome-dev/Makefile b/housekeeping/docker/kagome-dev/Makefile index 2fea5787e2..0c0d985876 100644 --- a/housekeeping/docker/kagome-dev/Makefile +++ b/housekeeping/docker/kagome-dev/Makefile @@ -19,15 +19,6 @@ PACKAGE_ARCHITECTURE ?= amd64 # Debug, Release, RelWithDebInfo BUILD_TYPE ?= Release -# Generated versions -OS_IMAGE ?= $(OS_IMAGE_NAME):$(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH) -OS_IMAGE_TAG_WITH_HASH := $(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH) -OS_IMAGE_SHORT_HASH := $(shell echo $(OS_IMAGE_HASH) | cut -c1-7) -BUILDER_IMAGE_TAG ?= $(OS_IMAGE_SHORT_HASH)_rust$(RUST_VERSION)_gcc$(GCC_VERSION)_llvm$(LLVM_VERSION) -BUILDER_LATEST_TAG ?= latest -TESTER_LATEST_TAG ?= latest -DOCKERHUB_BUILDER_PATH ?= $(DOCKERHUB_REGISTRY_PATH)_builder - # kagome_dev_docker_build Variables BUILD_DIR ?= build CACHE_DIR := $(shell pwd)/../../../../kagome/$(BUILD_DIR)/cache @@ -38,12 +29,23 @@ GITHUB_HUNTER_TOKEN ?= CTEST_OUTPUT_ON_FAILURE ?= 1 WERROR ?= OFF +# Generated versions +OS_IMAGE ?= $(OS_IMAGE_NAME):$(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH) +OS_IMAGE_TAG_WITH_HASH := $(OS_IMAGE_TAG)@sha256:$(OS_IMAGE_HASH) +OS_IMAGE_SHORT_HASH := $(shell echo $(OS_IMAGE_HASH) | cut -c1-7) +BUILDER_IMAGE_TAG ?= $(OS_IMAGE_SHORT_HASH)_rust$(RUST_VERSION)_gcc$(GCC_VERSION)_llvm$(LLVM_VERSION) +BUILDER_LATEST_TAG ?= latest +TESTER_LATEST_TAG ?= latest +DOCKERHUB_BUILDER_PATH ?= $(DOCKERHUB_REGISTRY_PATH)_builder +KAGOME_SANITIZED_VERSION = $(shell cd $(WORKING_DIR) && ./get_version.sh --sanitized) + # kagome_runtime_cache and kagome_image_build Variables KAGOME_PACKAGE_VERSION ?= #KAGOME_RUNTIME_PACKAGE_VERSION ?= # upload_apt_package Variables ARTIFACTS_REPO ?= kagome-apt +PUBLIC_ARTIFACTS_REPO ?= kagome REGION ?= europe-north1 # CI Variables @@ -55,11 +57,11 @@ export DOCKER_BUILDKIT=1 # BUILDKIT_PROGRESS - auto, plain, tty, rawjson export BUILDKIT_PROGRESS=auto - get_versions: @echo "full_commit_hash: `git rev-parse HEAD`" | tee commit_hash.txt @echo "short_commit_hash: `git rev-parse HEAD | head -c 7`" | tee -a commit_hash.txt @echo "kagome_version: `cd $(WORKING_DIR) && ./get_version.sh`" | tee kagome_version.txt + @echo "kagome_sanitized_version: $(KAGOME_SANITIZED_VERSION)" | tee -a kagome_version.txt builder_image_tag: @echo $(BUILDER_IMAGE_TAG) @@ -133,8 +135,17 @@ kagome_dev_docker_build: $(PACKAGE_ARCHITECTURE) \ kagome-dev \ /tmp/kagome \ - 'Kagome Dev Debian Package' \ - '$(DEPENDENCIES)' ; \ + 'Kagome Dev Ubuntu Package' \ + '$(DEPENDENCIES)' && \ + if [ "$(IS_MAIN_OR_TAG)" = "true" ] && [ "$(GIT_REF_NAME)" != "master" ] && [ "$(BUILD_TYPE)" = "Release" ]; then \ + ./build_apt_package.sh \ + \"$(KAGOME_SANITIZED_VERSION)-$(BUILD_TYPE)\" \ + $(PACKAGE_ARCHITECTURE) \ + kagome \ + /tmp/kagome \ + 'Kagome Ubuntu Package' \ + '$(DEPENDENCIES)' ; \ + fi; \ " || DOCKER_EXEC_RESULT=$$? ; \ if [ $$DOCKER_EXEC_RESULT -ne 0 ]; then \ echo "Error: Docker exec failed with return code $$DOCKER_EXEC_RESULT"; \ @@ -244,7 +255,10 @@ upload_apt_package: SHORT_COMMIT_HASH=$$(grep 'short_commit_hash:' commit_hash.txt | cut -d ' ' -f 2); \ gcloud config set artifacts/repository $(ARTIFACTS_REPO); \ gcloud config set artifacts/location $(REGION); \ - gcloud artifacts apt upload $(ARTIFACTS_REPO) --source=./pkg/kagome-dev_$$(date +'%y.%m.%d')-$${SHORT_COMMIT_HASH}-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb + gcloud artifacts apt upload $(ARTIFACTS_REPO) --source=./pkg/kagome-dev_$$(date +'%y.%m.%d')-$${SHORT_COMMIT_HASH}-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb ; \ + if [ "$(IS_MAIN_OR_TAG)" = "true" ] && [ "$(GIT_REF_NAME)" != "master" ] && [ "$(BUILD_TYPE)" = "Release" ]; then \ + gcloud artifacts apt upload $(PUBLIC_ARTIFACTS_REPO) --source=./pkg/kagome_$(KAGOME_SANITIZED_VERSION)-$(BUILD_TYPE)_$(PACKAGE_ARCHITECTURE).deb ; \ + fi; runtime_cache: CONTAINER_NAME=kagome_dev_runtime_cache_$$(openssl rand -hex 6); \ @@ -274,7 +288,7 @@ runtime_cache: $(PACKAGE_ARCHITECTURE) \ kagome-dev-runtime \ /tmp/kagome_runtime \ - 'Kagome Runtime Dev Debian Package' \ + 'Kagome Runtime Dev Ubuntu Package' \ 'kagome-dev' \ /tmp/kagome/runtimes-cache/ ; \ " || DOCKER_EXEC_RESULT=$$? ; \ diff --git a/housekeeping/docker/kagome-dev/build_apt_package.sh b/housekeeping/docker/kagome-dev/build_apt_package.sh index 9b776b904e..11b1666115 100755 --- a/housekeeping/docker/kagome-dev/build_apt_package.sh +++ b/housekeeping/docker/kagome-dev/build_apt_package.sh @@ -68,7 +68,7 @@ mkdir -p ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR} log "Working directory: $(pwd)/pkg/" log "Copying artifacts..." -mv -f ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR}/ +cp -rf ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}${BINARY_INSTALL_DIR}/ log "Package: ${PACKAGE_NAME}" log "Version: ${VERSION}" diff --git a/zombienet/docker/build_apt_package.sh b/zombienet/docker/build_apt_package.sh index 5c82325b2e..bfbd7a74f2 100755 --- a/zombienet/docker/build_apt_package.sh +++ b/zombienet/docker/build_apt_package.sh @@ -71,7 +71,7 @@ mkdir -p ./pkg/${DIR_NAME}/DEBIAN mkdir -p ./pkg/${DIR_NAME}/usr/local/bin log "Copying artifacts..." -mv -f ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}/usr/local/bin/ +cp -rf ${ARTIFACTS_DIR}/* ./pkg/${DIR_NAME}/usr/local/bin/ log "Creating control file..." cat <<EOF > ./pkg/${DIR_NAME}/DEBIAN/control