Configure CI to build and publish Debian packages
This commit is contained in:
parent
575c09dde3
commit
553523d0c2
4 changed files with 218 additions and 0 deletions
150
.gitlab-ci.yml
Normal file
150
.gitlab-ci.yml
Normal file
|
@ -0,0 +1,150 @@
|
|||
---
|
||||
stages:
|
||||
- tests
|
||||
- build
|
||||
- upload
|
||||
- release
|
||||
- publish
|
||||
|
||||
tests:
|
||||
image: docker.io/brenard/python-pre-commit:latest
|
||||
stage: tests
|
||||
script:
|
||||
- pre-commit run --all-files
|
||||
|
||||
build:debian12:
|
||||
image: docker.io/brenard/debian-python-deb:debian12
|
||||
stage: build
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
before_script:
|
||||
- ./build.sh --install-build-deps-only -x
|
||||
script:
|
||||
- >
|
||||
if [ "$GITLAB_CI" == "true" ]; then
|
||||
./build.sh -x --purge-sources-directory
|
||||
else
|
||||
./build.sh -x
|
||||
fi
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/*
|
||||
|
||||
build:debian11:
|
||||
image: docker.io/brenard/debian-python-deb:debian11
|
||||
stage: build
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
before_script:
|
||||
- ./build.sh --install-build-deps-only -x
|
||||
script:
|
||||
- >
|
||||
if [ "$GITLAB_CI" == "true" ]; then
|
||||
./build.sh -x --purge-sources-directory
|
||||
else
|
||||
./build.sh -x
|
||||
fi
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/*
|
||||
|
||||
build:debian10:
|
||||
image: docker.io/brenard/debian-python-deb:debian10
|
||||
stage: build
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
before_script:
|
||||
- ./build.sh --install-build-deps-only -x
|
||||
script:
|
||||
- >
|
||||
if [ "$GITLAB_CI" == "true" ]; then
|
||||
./build.sh -x --purge-sources-directory
|
||||
else
|
||||
./build.sh -x
|
||||
fi
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/*
|
||||
|
||||
upload:
|
||||
stage: upload
|
||||
image:
|
||||
name: docker.io/alpine
|
||||
needs:
|
||||
- "build:debian12"
|
||||
- "build:debian11"
|
||||
- "build:debian10"
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
before_script:
|
||||
- apk update
|
||||
- apk add bash curl
|
||||
script:
|
||||
- bash -x .gitlab/upload.sh
|
||||
artifacts:
|
||||
paths:
|
||||
- dist/release-notes.md
|
||||
- dist/release-files.txt
|
||||
|
||||
release:
|
||||
stage: release
|
||||
image: docker.io/alpine
|
||||
needs:
|
||||
- "upload"
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
before_script:
|
||||
- apk update
|
||||
- apk add bash curl jo
|
||||
- |
|
||||
curl --location \
|
||||
--output /usr/local/bin/release-cli \
|
||||
"https://gitlab.com/api/v4/projects/gitlab-org%2Frelease-cli/packages/generic/release-cli/latest/release-cli-linux-amd64"
|
||||
- chmod +x /usr/local/bin/release-cli
|
||||
script:
|
||||
- bash -x .gitlab/release.sh
|
||||
|
||||
publish:debian12:
|
||||
image:
|
||||
name: docker.io/brenard/aptly-publish:latest
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
stage: publish
|
||||
script:
|
||||
- echo "Publish packages for Debian Bookworm (12) on Easter-eggs APT repository..."
|
||||
- aptly-publish
|
||||
needs:
|
||||
- "build:debian12"
|
||||
- job: "release"
|
||||
artifacts: false
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
|
||||
publish:debian11:
|
||||
image:
|
||||
name: docker.io/brenard/aptly-publish:latest
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
stage: publish
|
||||
script:
|
||||
- echo "Publish packages for Debian Bullseye (11) on Easter-eggs APT repository..."
|
||||
- aptly-publish
|
||||
needs:
|
||||
- "build:debian11"
|
||||
- job: "release"
|
||||
artifacts: false
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
|
||||
publish:debian10:
|
||||
image:
|
||||
name: docker.io/brenard/aptly-publish:latest
|
||||
entrypoint: ["/bin/sh", "-c"]
|
||||
stage: publish
|
||||
script:
|
||||
- echo "Publish packages for Debian Buster (10) on Easter-eggs APT repository..."
|
||||
- aptly-publish
|
||||
needs:
|
||||
- "build:debian10"
|
||||
- job: "release"
|
||||
artifacts: false
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
27
.gitlab/release.sh
Executable file
27
.gitlab/release.sh
Executable file
|
@ -0,0 +1,27 @@
|
|||
#!/bin/bash
|
||||
# vim: shiftwidth=4 tabstop=4 expandtab
|
||||
|
||||
echo "Creating a release for $CI_COMMIT_TAG"
|
||||
|
||||
cd "$( dirname "$0" )/../dist" || { echo "dist directory not found"; exit 1; }
|
||||
[[ -f release-files.txt ]] || { echo "release-files.txt file is missing"; exit 1; }
|
||||
for var in CI_API_V4_URL CI_PROJECT_ID CI_PROJECT_NAME CI_JOB_TOKEN CI_COMMIT_TAG CI_COMMIT_SHA; do
|
||||
[[ -n "${!var}" ]] || { echo "$var variable is missing"; exit 1; }
|
||||
done
|
||||
|
||||
PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}"
|
||||
args=(
|
||||
create
|
||||
--name "$CI_COMMIT_TAG"
|
||||
--description release-notes.md
|
||||
--tag-name "$CI_COMMIT_TAG"
|
||||
--ref "$CI_COMMIT_SHA"
|
||||
)
|
||||
while read -r file; do
|
||||
args+=(
|
||||
--assets-link
|
||||
"$( jo name="$file" url="${PACKAGE_REGISTRY_URL}/$file" link_type=package )"
|
||||
)
|
||||
done < release-files.txt
|
||||
|
||||
release-cli "${args[@]}"
|
34
.gitlab/upload.sh
Executable file
34
.gitlab/upload.sh
Executable file
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash
|
||||
# vim: shiftwidth=4 tabstop=4 expandtab
|
||||
|
||||
cd "$( dirname "$0" )/../dist" || { echo "dist directory not found"; exit 1; }
|
||||
for var in CI_API_V4_URL CI_PROJECT_ID CI_JOB_TOKEN CI_PROJECT_NAME CI_COMMIT_TAG; do
|
||||
[[ -n "${!var}" ]] || { echo "$var variable is missing"; exit 1; }
|
||||
done
|
||||
|
||||
|
||||
rm -f release-files.txt
|
||||
touch release-files.txt
|
||||
|
||||
PACKAGE_REGISTRY_URL="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/${CI_PROJECT_NAME}/${CI_COMMIT_TAG}"
|
||||
echo "Upload debian built packages to Gitlab package registry (${PACKAGE_REGISTRY_URL}):"
|
||||
for file in *.deb; do
|
||||
# The filename can contain only lowercase letters (a-z), uppercase letter (A-Z), numbers (0-9),
|
||||
# dots (.), hyphens (-), or underscores (_).
|
||||
filename=$( tr '~' '_' <<< "$file" | tr '+' '_' | sed 's/[^a-zA-Z0-9\.\_\-]//g' )
|
||||
echo -n " - Upload '$file' as '$filename'..."
|
||||
if ! output=$(
|
||||
curl -v --fail-with-body \
|
||||
--header "JOB-TOKEN: $CI_JOB_TOKEN" \
|
||||
--upload-file "$file" \
|
||||
"${PACKAGE_REGISTRY_URL}/${filename}" 2>&1
|
||||
); then
|
||||
echo
|
||||
# shellcheck disable=SC2001
|
||||
echo -e " => Fail to upload '$file' as '$filename':\n$( sed 's/^/ /' <<< "$output" )"
|
||||
exit 1
|
||||
fi
|
||||
echo " done."
|
||||
echo "$filename" >> release-files.txt
|
||||
done
|
||||
echo "done."
|
7
.yamllint.yml
Normal file
7
.yamllint.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
line-length:
|
||||
max: 100
|
||||
level: warning
|
Loading…
Reference in a new issue