Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F85629324
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Award Token
Flag For Later
Size
10 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/.dockerignore b/.dockerignore
index 16c7d02..4ab0c19 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -1,7 +1,8 @@
.git/
.gitignore
\#*
.#*
*~
doc/
build/
+cache/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2092271..3c164ef 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,187 +1,222 @@
# This file is part of libkazv.
# SPDX-FileCopyrightText: 2022-2023 tusooa <tusooa@kazv.moe>
# SPDX-License-Identifier: AGPL-3.0-or-later
workflow:
rules:
- if: '$CI_PIPELINE_SOURCE == "trigger"'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: never
- if: $CI_COMMIT_BRANCH
- if: '$CI_COMMIT_TAG !~ /^phabricator\//'
stages:
- prepare
- lint
- build
- coverage-vis
- coverage-upload
- doc
- pages
- report
.report:
image:
name: 'reg.lily.kazv.moe/infra/phorge-ci-tools:servant'
rules:
- if: $TARGET_PHID
when: always
- when: never
before_script:
- pipelineUrl="$CI_PROJECT_URL"/-/pipelines/"$CI_PIPELINE_ID"
report-start:
extends: .report
stage: prepare
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"work\", \"unit\": [{\"name\": \"GitLab CI (information only)\", \"result\": \"skip\", \"details\": \"$pipelineUrl\", \"format\": \"remarkup\"}]}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
lint:
stage: lint
script: |
echo 'Verify that no source file contains tabs'
! egrep -R --exclude-dir=resources $'\t' src
rules: &build-rules
- changes: &src-chg
- .gitlab-ci.yml
- Dockerfile
- '**/*.cpp'
- '**/*.hpp'
- '**/CMakeLists.txt'
- '**/*.in'
- 'src/tests/resources/**'
.build:
stage: build
image:
- name: gcr.io/kaniko-project/executor:debug
- entrypoint: [""]
- script: |
- mkdir -p /kaniko/.docker
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json
- if [ "$CI_PIPELINE_SOURCE" == "trigger" ]; then
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --build-arg JOBS=1 --build-arg BASE_IMG_TAG=$BASE_IMG_TAG --build-arg BUILD_TYPE=$BUILD_TYPE --no-push
- else
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --build-arg JOBS=1 --build-arg BASE_IMG_TAG=$BASE_IMG_TAG --build-arg BUILD_TYPE=$BUILD_TYPE $PUSH_TAGS
- fi
+ name: quay.io/podman/stable
+ tags:
+ - podman
+ script:
+ # https://github.com/containers/podman/discussions/15612
+ - export TMPDIR="$CI_PROJECT_DIR"/cache
+ - mkdir -pv "$TMPDIR"
+ - chown -R podman:podman "$TMPDIR"
+ - sudo -u podman TMPDIR="$TMPDIR" podman login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
+ - sudo -u podman TMPDIR="$TMPDIR" podman build -f "$CI_PROJECT_DIR"/Containerfile --build-arg JOBS=1 --build-arg BASE_IMG_TAG=$BASE_IMG_TAG --build-arg BUILD_TYPE=$BUILD_TYPE $BUILD_ARGS -t "$CANONICAL_TAG" "$CI_PROJECT_DIR"
+ - |
+ if [ "$CI_PIPELINE_SOURCE" == "trigger" ]; then
+ echo 'Skipping pushing'
+ else
+ sudo -u podman TMPDIR="$TMPDIR" podman push "$CANONICAL_TAG"
+ if [ -n "$ADDITIONAL_TAGS" ]; then
+ for t in $ADDITIONAL_TAGS; do
+ sudo -u podman TMPDIR="$TMPDIR" podman push "$CANONICAL_TAG" "$t"
+ done
+ else
+ echo 'No additional tags to push'
+ fi
+ fi
rules: *build-rules
+ cache:
+ - key: $CI_JOB_NAME
+ paths:
+ - cache/buildah-cache-1000/
'build:debug:22.04':
extends: .build
before_script:
- BASE_IMG_TAG=servant-ubuntu22.04
- BUILD_TYPE=Debug
- - PUSH_TAGS="--destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG --destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-debug --destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04 --destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04-debug"
+ - CANONICAL_TAG="$CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04-debug"
+ - ADDITIONAL_TAGS="$CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-debug $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04"
'build:production:22.04':
extends: .build
before_script:
- BASE_IMG_TAG=servant-ubuntu22.04
- BUILD_TYPE=Release
- - PUSH_TAGS="--destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-prod --destination $CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04-prod"
+ - CANONICAL_TAG="$CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-ubuntu22.04-prod"
+ - ADDITIONAL_TAGS="$CI_REGISTRY_IMAGE/libkazv:$CI_COMMIT_REF_SLUG-prod"
'build:coverage':
stage: build
image:
name: reg.lily.kazv.moe/kazv/libkazv-deps/deps:servant-ubuntu22.04
entrypoint: [""]
+ # Do not set CCACHE_BASEDIR when building for coverage
+ # https://gitlab.kitware.com/cmake/cmake/-/issues/21138
+ # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105238
+ # The build directory is always /builds/kazv/libkazv/ anyway
script: |
export BUILD_TYPE=Debug
export JOBS=1
export DEPS_INSTALL_DIR=/opt/libkazv-deps
export LIBKAZV_INSTALL_DIR=/opt/libkazv
+ export CCACHE_COMPILERCHECK=content
+ export CCACHE_DIR="$CI_PROJECT_DIR"/ccache
+ export PATH="/usr/lib/ccache:$PATH"
+ export CC=/usr/lib/ccache/gcc CXX=/usr/lib/ccache/g++
+ ccache --zero-stats || true
+ ccache --show-stats || true
mkdir build && cd build && \
cmake .. -DCMAKE_INSTALL_PREFIX="$LIBKAZV_INSTALL_DIR" -DCMAKE_PREFIX_PATH="$DEPS_INSTALL_DIR" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -Dlibkazv_BUILD_TESTS=ON \
-Dlibkazv_BUILD_EXAMPLES=ON -Dlibkazv_BUILD_KAZVJOB=ON -Dlibkazv_ENABLE_COVERAGE=ON -DCMAKE_CXX_FLAGS=-fsanitize=address && \
make -j$JOBS && \
make CTEST_OUTPUT_ON_FAILURE=1 test && \
gcovr --xml-pretty --exclude-unreachable-branches --print-summary -o coverage.xml -r "${CI_PROJECT_DIR}" --object-directory src -e '.*/api/.*' -e '.*/tests/.*' -e '.*/testfixtures/.*' -e '.*/examples/.*'
+ after_script:
+ - ccache --show-stats
coverage: /^\s*lines:\s*\d+.\d+\%/
artifacts:
name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
paths:
- build/coverage.xml
reports:
junit: build/test-report.xml
coverage_report:
coverage_format: cobertura
path: build/coverage.xml
rules: *build-rules
+ cache:
+ - key: $CI_JOB_NAME
+ paths:
+ - ccache/
'coverage-report':
rules: *build-rules
stage: coverage-vis
image: 'reg.lily.kazv.moe/infra/phorge-ci-tools/pycobertura:servant'
script:
- pycobertura show ./build/coverage.xml --format html --output ./build/coverage.html --source .
- pycobertura show ./build/coverage.xml --format markdown --source . | python -c 'import sys, json; print(json.dumps("".join(sys.stdin)))' > ./build/coverage-md.json
- /tools/cobertura-to-phorge ./build/coverage.xml . > ./build/coverage.json
artifacts:
name: ${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHA}
paths:
- build/coverage.html
- build/coverage-md.json
- build/coverage.json
upload-coverage:
extends: .report
stage: coverage-upload
rules:
- if: $TARGET_PHID
changes: *src-chg
when: always
- when: never
script:
- '{ echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"work\", \"unit\": [{\"name\": \"Test coverage\", \"result\": \"pass\", \"details\": "; cat build/coverage-md.json; echo ", \"format\": \"remarkup\", \"coverage\":"; cat build/coverage.json; echo "}]}"; } | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
'doc:build':
stage: doc
image: reg.lily.kazv.moe/kazv/libkazv-deps/deps:servant
dependencies: []
script:
- doxygen Doxyfile
artifacts:
paths:
- doc/html/
rules:
- changes: *src-chg
- changes: &doc-chg
- '**/*.md'
- .gitlab-ci.yml
- public/**/*
pages:
stage: pages
image: alpine
dependencies:
- 'doc:build'
script:
- mv -v doc/html public/api
artifacts:
paths:
- public
rules:
- if: $CI_COMMIT_BRANCH != "servant"
when: never
- changes: *src-chg
- changes: *doc-chg
report-success:
extends: .report
rules:
- if: $TARGET_PHID
when: on_success
- when: never
stage: report
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"pass\"}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
report-failure:
extends: .report
rules:
- if: $TARGET_PHID
when: on_failure
- when: never
stage: report
script:
- 'echo "{\"receiver\": \"$TARGET_PHID\", \"type\": \"fail\"}" | /tools/arcanist/bin/arc call-conduit --conduit-uri https://iron.lily-is.land/ --conduit-token "$CONDUIT_TOKEN" -- harbormaster.sendmessage'
diff --git a/Dockerfile b/Containerfile
similarity index 59%
rename from Dockerfile
rename to Containerfile
index 542df4d..4389dcb 100644
--- a/Dockerfile
+++ b/Containerfile
@@ -1,21 +1,29 @@
ARG BASE_IMG_TAG=servant
FROM reg.lily.kazv.moe/kazv/libkazv-deps/deps:$BASE_IMG_TAG
RUN mkdir -pv /build
COPY . /build/libkazv
WORKDIR /build/libkazv
ARG BUILD_TYPE=Debug
ARG JOBS=3
ARG DEPS_INSTALL_DIR=/opt/libkazv-deps
ARG LIBKAZV_INSTALL_DIR=/opt/libkazv
-RUN mkdir build && cd build && \
+RUN --mount=type=cache,id=ccache,target=/ccache \
+ export CCACHE_COMPILERCHECK=content \
+ CCACHE_BASEDIR=/build/libkazv \
+ CCACHE_DIR=/ccache \
+ PATH="/usr/lib/ccache:$PATH" \
+ CC=/usr/lib/ccache/gcc CXX=/usr/lib/ccache/g++ && \
+ ccache --zero-stats; ccache --show-stats; \
+ mkdir build && cd build && \
cmake .. -DCMAKE_INSTALL_PREFIX="$LIBKAZV_INSTALL_DIR" -DCMAKE_PREFIX_PATH="$DEPS_INSTALL_DIR" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -Dlibkazv_BUILD_TESTS=ON -Dlibkazv_BUILD_EXAMPLES=ON -Dlibkazv_BUILD_KAZVJOB=ON && \
make -j$JOBS && \
make test && \
make -j$JOBS install && \
cd ../.. && \
- rm -rf /build/libkazv
+ rm -rf /build/libkazv && \
+ ccache --show-stats
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Aug 8, 7:23 PM (1 d, 16 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
1723909
Default Alt Text
(10 KB)
Attached To
Mode
rL libkazv
Attached
Detach File
Event Timeline
Log In to Comment