Skip to content

Commit

Permalink
kagome docker build update
Browse files Browse the repository at this point in the history
  • Loading branch information
Kirill Azovtsev committed Feb 15, 2025
1 parent a976cf1 commit 93e325e
Show file tree
Hide file tree
Showing 10 changed files with 281 additions and 182 deletions.
158 changes: 82 additions & 76 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,80 +101,82 @@ jobs:
KAGOME_IN_DOCKER: 0
KAGOME_MAC_CI: 1

Linux:
if: false # Need to fix
# ${{
# !(github.ref == 'refs/heads/master' ||
# startsWith( github.ref, 'refs/tags/' )) }}
strategy:
fail-fast: false
matrix:
options:
- name: "Linux: clang-19 External Project"
run: ./housekeeping/make_external_build.sh -DCLEAR_OBJS=ON -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain/clang-19_cxx20.cmake
name: "${{ matrix.options.name }}"
runs-on: ubuntu-24.04
timeout-minutes: 120
container: qdrvm/kagome_builder:99c3519_rust1.81.0_gcc13_llvm19
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
if: ${{ env.USE_CACHE == 'true' }}
with:
path: ${{ env.CACHE_PATHS }}
key: ${{ github.job }}-${{ matrix.options.name }}-${{ env.CACHE_VERSION }}
- name: df du
run: |
df -m || true
du -hd1 /__w /github || true
- name: Install mold
run: ./housekeeping/ci_install_mold.sh --make-default
- name: "${{ matrix.options.name }}"
run: "${{ matrix.options.run }}"
- name: df du
if: ${{ always() }}
run: |
df -m || true
du -hd1 /__w /github || true
coverage-self-hosted:
if: false # ${{ github.ref == 'refs/heads/master' || startsWith( github.ref, 'refs/tags/') || contains( github.event.pull_request.labels.*.name, 'Non-master self-hosted') }}
name: "Self-hosted: Linux: gcc-13 coverage/sonar"
runs-on: [ actions-runner-controller ]
timeout-minutes: 120
container: qdrvm/kagome_builder:99c3519_rust1.81.0_gcc13_llvm19
steps:
- uses: actions/checkout@v4
- uses: actions/cache@v4
if: ${{ env.USE_CACHE == 'true' }}
with:
path: ${{ env.CACHE_PATHS }}
key: ${{ github.job }}-${{ env.CACHE_VERSION }}
- name: Install mold
run: ./housekeeping/ci_install_mold.sh --make-default
- name: makeBuild
env:
BUILD_FINAL_TARGET: ctest_coverage
run: ./housekeeping/make_build.sh -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/gcc-13_cxx20.cmake -DCOVERAGE=ON -DCLEAR_OBJS=ON
- if: ${{
github.event_name != 'pull_request' ||
github.event.pull_request.head.repo.full_name == github.repository }}
name: Submit Coverage
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
run: if [ "CODECOV_TOKEN" != "null" ]; then ./housekeeping/codecov.sh; else echo "Some secret undefined. Step passed..."; fi
- if: ${{
github.event_name != 'pull_request' ||
github.event.pull_request.head.repo.full_name == github.repository }}
name: Sonar
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
GITHUB_USERNAME: ${{ secrets.GITHUB_USERNAME }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BRANCH_NAME: ${{ github.ref }}
run: if [ "$SONAR_TOKEN" != "null" -a "$GITHUB_USERNAME" != "null" -a "$GITHUB_TOKEN" != "null" ]; then ./housekeeping/sonar.sh; else echo "Some secret undefined. Step passed..."; fi
# Linux:
# if: false # Need to fix
# # ${{
# # !(github.ref == 'refs/heads/master' ||
# # startsWith( github.ref, 'refs/tags/' )) }}
# strategy:
# fail-fast: false
# matrix:
# options:
# - name: "Linux: clang-19 External Project"
# run: ./housekeeping/make_external_build.sh -DCLEAR_OBJS=ON -DCMAKE_TOOLCHAIN_FILE=../../cmake/toolchain/clang-19_cxx20.cmake
# name: "${{ matrix.options.name }}"
# runs-on: ubuntu-24.04
# timeout-minutes: 120
# container: qdrvm/kagome_builder:99c3519_rust1.81.0_gcc13_llvm19
# steps:
# - uses: actions/checkout@v4
# - uses: actions/cache@v4
# if: ${{ env.USE_CACHE == 'true' }}
# with:
# path: ${{ env.CACHE_PATHS }}
# key: ${{ github.job }}-${{ matrix.options.name }}-${{ env.CACHE_VERSION }}
# - name: df du
# run: |
# df -m || true
# du -hd1 /__w /github || true
# - name: Install mold
# run: ./housekeeping/ci_install_mold.sh --make-default
# - name: "${{ matrix.options.name }}"
# run: "${{ matrix.options.run }}"
# - name: df du
# if: ${{ always() }}
# run: |
# df -m || true
# du -hd1 /__w /github || true
#
# coverage-self-hosted:
# if: false # ${{ github.ref == 'refs/heads/master' || startsWith( github.ref, 'refs/tags/') || contains( github.event.pull_request.labels.*.name, 'Non-master self-hosted') }}
# name: "Self-hosted: Linux: gcc-13 coverage/sonar"
# runs-on: [ actions-runner-controller ]
# timeout-minutes: 120
# container: qdrvm/kagome_builder:99c3519_rust1.81.0_gcc13_llvm19
# steps:
# - uses: actions/checkout@v4
# - uses: actions/cache@v4
# if: ${{ env.USE_CACHE == 'true' }}
# with:
# path: ${{ env.CACHE_PATHS }}
# key: ${{ github.job }}-${{ env.CACHE_VERSION }}
# - name: Install mold
# run: ./housekeeping/ci_install_mold.sh --make-default
# - name: makeBuild
# env:
# BUILD_FINAL_TARGET: ctest_coverage
# run: ./housekeeping/make_build.sh -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain/gcc-13_cxx20.cmake -DCOVERAGE=ON -DCLEAR_OBJS=ON
# - if: ${{
# github.event_name != 'pull_request' ||
# github.event.pull_request.head.repo.full_name == github.repository }}
# name: Submit Coverage
# env:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# run: if [ "CODECOV_TOKEN" != "null" ]; then ./housekeeping/codecov.sh; else echo "Some secret undefined. Step passed..."; fi
# - if: ${{
# github.event_name != 'pull_request' ||
# github.event.pull_request.head.repo.full_name == github.repository }}
# name: Sonar
# env:
# SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
# GITHUB_USERNAME: ${{ secrets.GITHUB_USERNAME }}
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# BRANCH_NAME: ${{ github.ref }}
# run: if [ "$SONAR_TOKEN" != "null" -a "$GITHUB_USERNAME" != "null" -a "$GITHUB_TOKEN" != "null" ]; then ./housekeeping/sonar.sh; else echo "Some secret undefined. Step passed..."; fi

kagome_dev_docker_build_sanitizers:
# temporary disabled
if: false
strategy:
fail-fast: false
matrix:
Expand Down Expand Up @@ -242,6 +244,8 @@ jobs:
key: ${{ steps.cache-restore.outputs.cache-primary-key }}

kagome_dev_docker_build_tidy:
# temporary disabled
if: false
runs-on: ubuntu-24.04
timeout-minutes: 600 # TODO(xDimon): revert after merge PR#2208
name: "Linux: clang-tidy"
Expand Down Expand Up @@ -452,13 +456,15 @@ jobs:
Zombie-Tests:
# temporary disabled
if: false
runs-on: [ actions-runner-controller ]
timeout-minutes: 60
needs: [kagome_dev_docker_build]
if: ${{
github.ref == 'refs/heads/master' ||
startsWith( github.ref, 'refs/tags/') ||
github.event.inputs.run_all_steps == 'true' }}
# if: ${{
# github.ref == 'refs/heads/master' ||
# startsWith( github.ref, 'refs/tags/') ||
# github.event.inputs.run_all_steps == 'true' }}
strategy:
fail-fast: false
matrix:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
**/build/
**/build-*/
**/build_*/
**/cmake-build-*/
*.DS_Store
*.vscode/
Expand Down
21 changes: 19 additions & 2 deletions housekeeping/docker/kagome-dev/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,34 @@ VERSION_FILES := commit_hash.txt kagome_version.txt
ifneq ($(filter configure,$(MAKECMDGOALS)),configure)
missing_files := $(filter-out $(wildcard $(VERSION_FILES)),$(VERSION_FILES))
ifneq ($(missing_files),)
$(error Missing version files: $(missing_files). Use 'make configure' to generate them.)
$(error Missing version files: $(missing_files). Use 'make configure' to generate them.)
endif

# Check if the necessary environment variables are set before running any targets
ENV_VARS := DOCKER_REGISTRY_PATH PROJECT_ID GOOGLE_APPLICATION_CREDENTIALS
missing_env := $(strip $(foreach var,$(ENV_VARS),$(if $(strip $($(var))),, $(var))))
ifneq ($(missing_env),)
$(error Missing environment variables: $(missing_env). Please set them before running make.)
$(error Missing environment variables: $(missing_env). Please set them before running make.)
endif
endif

define safe_rm
PATH_TO_RM="$$(readlink -f '$(1)')"; \
for F in / /home /etc /usr; do \
if [ "$$PATH_TO_RM" = "$$F" ]; then \
echo "Forbidden path: $$PATH_TO_RM"; \
exit 1; \
fi; \
done; \
echo "Checking $$PATH_TO_RM..."; \
if [ -d "$$PATH_TO_RM" ]; then \
echo "Deleting $$PATH_TO_RM"; \
rm -rv --preserve-root "$$PATH_TO_RM"; \
else \
echo "Directory $$PATH_TO_RM does not exist"; \
fi
endef

# Include all the necessary files
include Makefile.include/variables.mk
include Makefile.include/versions.mk
Expand Down
120 changes: 80 additions & 40 deletions housekeeping/docker/kagome-dev/Makefile.include/kagome_bin.mk
Original file line number Diff line number Diff line change
@@ -1,72 +1,112 @@
kagome_dev_docker_build:
$(MAKE) get_versions
kagome_docker_build:
@echo "-- Building Kagome binary for $(ARCHITECTURE) architecture..." ; \
$(MAKE) docker_run ; \
if $(MAKE) docker_exec; then \
echo "-- Build successful."; \
else \
echo "-- Build failed. Cleaning up..."; \
$(MAKE) clean_container; \
exit 1; \
fi ; \
$(MAKE) clean_container

stop_container:
@echo "-- Stopping and removing polkadot_builder container..."
docker stop $(KAGOME_BUILD_CONTAINER_NAME) || true

clean_container: stop_container
@echo "-- Removing previous build container..."
docker rm $(KAGOME_BUILD_CONTAINER_NAME) || true

reset_build_state: clean_container
@echo "-- Resetting build state..." ; \
rm -f ./commit_hash.txt ./kagome_version.txt || true; \
$(call safe_rm,$(BUILD_DIR)) || true

docker_run: clean_container
@echo "-- Running Kagome build container..." ; \
mkdir -p \
$(CACHE_DIR)/.cargo/git \
$(CACHE_DIR)/.cargo/registry \
$(CACHE_DIR)/.cargo \
$(CACHE_DIR)/.hunter \
$(CACHE_DIR)/.cache/ccache ; \
CONTAINER_NAME=kagome_dev_build_$$(openssl rand -hex 6); \
SHORT_COMMIT_HASH=$$(grep 'short_commit_hash:' commit_hash.txt | cut -d ' ' -f 2); \
DOCKER_EXEC_RESULT=0 ; \
echo "Build type: $(BUILD_TYPE)"; \
docker run -d --name $$CONTAINER_NAME \
docker run -d --name $(CONTAINER_NAME) \
--platform $(PLATFORM) \
--entrypoint "/bin/bash" \
-e SHORT_COMMIT_HASH=$$SHORT_COMMIT_HASH \
-e SHORT_COMMIT_HASH=$(SHORT_COMMIT_HASH) \
-e BUILD_TYPE=$(BUILD_TYPE) \
-e PACKAGE_ARCHITECTURE=$(PACKAGE_ARCHITECTURE) \
-e ARCHITECTURE=$(ARCHITECTURE) \
-e GITHUB_HUNTER_USERNAME=$(GITHUB_HUNTER_USERNAME) \
-e GITHUB_HUNTER_TOKEN=$(GITHUB_HUNTER_TOKEN) \
-e CTEST_OUTPUT_ON_FAILURE=$(CTEST_OUTPUT_ON_FAILURE) \
-v $$(pwd)/../../../../kagome:/opt/kagome \
-v $(GOOGLE_APPLICATION_CREDENTIALS):/root/.gcp/google_creds.json \
-v $(CACHE_DIR)/.cargo/git:/root/.cargo/git \
-v $(CACHE_DIR)/.cargo/registry:/root/.cargo/registry \
-v $(CACHE_DIR)/.hunter:/root/.hunter \
-v $(CACHE_DIR)/.cache/ccache:/root/.cache/ccache \
-v $(GOOGLE_APPLICATION_CREDENTIALS):$(IN_DOCKER_HOME)/.gcp/google_creds.json \
-v ./build_apt_package.sh:$(IN_DOCKER_HOME)/build_apt_package.sh \
-v $(WORKING_DIR):$(IN_DOCKER_HOME)/kagome \
-v $(BUILD_DIR)/pkg:$(IN_DOCKER_HOME)/pkg \
-v $(BUILD_DIR)/kagome_binary:$(IN_DOCKER_HOME)/kagome_binary \
-v $(CACHE_DIR)/.cargo:$(IN_DOCKER_HOME)/.cargo \
-v $(CACHE_DIR)/.hunter:$(IN_DOCKER_HOME)/.hunter \
-v $(CACHE_DIR)/.cache/ccache:$(IN_DOCKER_HOME)/.cache/ccache \
$(DOCKER_REGISTRY_PATH)kagome_builder_deb:$(BUILDER_IMAGE_TAG) \
-c "tail -f /dev/null"; \
docker exec -t $$CONTAINER_NAME /bin/bash -c \
"cd /opt/kagome && \
git config --global --add safe.directory /opt/kagome && \
git config --global --add safe.directory /root/.hunter/_Base/Cache/meta && \
tail -f /dev/null ; \
until [ "$$(docker inspect --format='{{.State.Health.Status}}' $(CONTAINER_NAME))" = "healthy" ]; do \
echo "Health is: \"$$(docker inspect --format='{{.State.Health.Status}}' $(CONTAINER_NAME))\"" ; \
sleep 5 ; \
done

docker_exec:
echo "-- Executing kagome_builder container..." ; \
docker exec -t $(CONTAINER_NAME) gosu $(USER_ID):$(GROUP_ID) /bin/bash -c \
"echo \"-- Setting up environment...\"; \
env ; \
cd $(IN_DOCKER_HOME)/kagome && \
git config --global --add safe.directory $(IN_DOCKER_HOME)/kagome && \
git config --global --add safe.directory $(IN_DOCKER_HOME)/.hunter/_Base/Cache/meta && \
source /venv/bin/activate && \
git submodule update --init && \
echo \"Building in $$(pwd)\" && \
cmake . -B\"$(BUILD_DIR)\" -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=\"$(BUILD_TYPE)\" -DBACKWARD=OFF -DWERROR=$(WERROR) && \
cmake --build \"$(BUILD_DIR)\" --target kagome -- -j$(BUILD_THREADS) && \
mkdir -p /tmp/kagome && \
cp /opt/kagome/$(BUILD_DIR)/node/kagome /tmp/kagome/kagome && \
cd /opt/kagome/housekeeping/docker/kagome-dev && \
./build_apt_package.sh \
\"$$(date +'%y.%m.%d')-$${SHORT_COMMIT_HASH}-$(BUILD_TYPE)\" \
$(PACKAGE_ARCHITECTURE) \
echo \"-- Recent commits:\" && git log --oneline -n 5 && \
echo \"Building Kagome in $$(pwd)\" && \
$(BUILD_COMMANDS) && \
echo \"-- Copying Kagome binary...\" && \
cp $(IN_DOCKER_HOME)/kagome/$(DOCKER_BUILD_DIR_NAME)/node/kagome $(IN_DOCKER_HOME)/kagome_binary/kagome && \
echo \"-- Building apt package...\" && \
cd $(IN_DOCKER_HOME) && ./build_apt_package.sh \
$(KAGOME_DEB_PACKAGE_VERSION) \
$(ARCHITECTURE) \
kagome-dev \
/tmp/kagome \
$(IN_DOCKER_HOME)/kagome_binary \
'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_DEB_RELEASE_PACKAGE_VERSION) \
$(ARCHITECTURE) \
kagome \
/tmp/kagome \
$(IN_DOCKER_HOME)/kagome_binary \
'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"; \
docker stop $$CONTAINER_NAME; \
exit $$DOCKER_EXEC_RESULT; \
fi; \
docker stop $$CONTAINER_NAME
fi

upload_apt_package:
SHORT_COMMIT_HASH=$$(grep 'short_commit_hash:' commit_hash.txt | cut -d ' ' -f 2); \
@echo "-- Uploading Kagome binary to Google Cloud Storage..." ; \
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 versions delete $(KAGOME_DEB_PACKAGE_VERSION) --package=kagome-dev --quiet || true ; \
gcloud artifacts apt upload $(ARTIFACTS_REPO) --source=./$(BUILD_DIR)/pkg/$(KAGOME_DEB_PACKAGE_NAME) ; \
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 ; \
echo "-- Uploading Kagome release binary to Google Cloud Storage..." ; \
gcloud artifacts versions delete $(KAGOME_DEB_RELEASE_PACKAGE_VERSION) --package=kagome-dev --quiet || true ; \
gcloud artifacts apt upload $(PUBLIC_ARTIFACTS_REPO) --source=./$(BUILD_DIR)/pkg/KAGOME_DEB_RELEASE_PACKAGE_NAME ; \
fi;

kagome_deb_package_info:
@echo "Kagome version: $(KAGOME_SANITIZED_VERSION)"
@echo "Kagome deb package version: $(KAGOME_DEB_PACKAGE_VERSION)"
@echo "Kagome deb package name: $(KAGOME_DEB_PACKAGE_NAME)"
@echo "Kagome deb release package version: $(KAGOME_DEB_RELEASE_PACKAGE_VERSION)"
@echo "Kagome deb release package name: $(KAGOME_DEB_RELEASE_PACKAGE_NAME)"
Loading

0 comments on commit 93e325e

Please sign in to comment.