Benjamin Renard
a5a91d14cf
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
159 lines
6.1 KiB
Markdown
159 lines
6.1 KiB
Markdown
# CI plugin to publish Debian package on a Aptly repository
|
|
|
|
This docker image could be used as an Woodpecker CI plugin to publish one (or more) Debian package on a Aptly repository using its API. It also could be used with Gitlab CI and Forgejo Actions to define a publishing job.
|
|
|
|
This plugin will try to :
|
|
|
|
- List all changes files in the specified directory and filter on the specified source package name (if specified)
|
|
- Iter on detected changes files and foreach of then:
|
|
- the changes file is parsed to detect the source package name, the distribution and included files
|
|
- the repository name is computed (if not specified). **Format:** `{prefix}_{distribution}_{component}`. **Note:** if the default prefix is specified (`.`), it will not be used to compute the repository name.
|
|
- the current published distribution is retrieved using APTLY Publish API to:
|
|
- check it was already manally published a first time
|
|
- check it used a snapshot kind of sources
|
|
- retrieve other components source snapshot
|
|
- Upload the changes file and all its included files using APTLY File Upload API in a directory named as the source package
|
|
- Include the changes file using APTLY Local Repos API
|
|
- Compute a snapshot name for the repository based on the current date and the repository name. **Format:** `YYYYMMDD-HHMMSS_{repository name}`
|
|
- Create a snapshot of the repository using APTLY Local Repos API
|
|
- Update the published distribution with this new snapshot as source of the specified component and keeping other components source snapshot.
|
|
|
|
In case of error, it will exit with a detailed error message (within the limits of what is provided by the Aptly API).
|
|
|
|
[![status-badge](https://ci.zionetrix.net/api/badges/bn8/aptly-publish/status.svg)](https://ci.zionetrix.net/bn8/aptly-publish)
|
|
|
|
# Usage
|
|
|
|
## With Woodpecker CI
|
|
|
|
The below pipeline configuration demonstrates simple usage as Woodpecker CI plugin:
|
|
|
|
```yaml
|
|
pipeline:
|
|
publish:
|
|
image: brenard/aptly-publish
|
|
settings:
|
|
api_url: https://your.aptly.tld/api
|
|
api_username: myproject
|
|
api_password:
|
|
from_secret: aptly_api_password
|
|
prefix: debian
|
|
repo_component: main
|
|
repo_name: debian_stable_main
|
|
path: dist
|
|
source_name: myproject
|
|
max_retries: 2
|
|
force_overwrite: true
|
|
```
|
|
|
|
**Parameters:**
|
|
|
|
- **api_url:** Your Aptly API URL (required)
|
|
- **api_username:** Username to authenticate on your Aptly API (required)
|
|
- **api_password:** Password to authenticate on your Aptly API (required)
|
|
- **prefix:** The publishing prefix (optional, default: `.`)
|
|
- **repo_component:** The component name to publish on (optional, default: `main`)
|
|
- **repo_name:** The repository name to publish on. If not specified, it will be computed using the specified prefix and component and the detected package distribution. See above for details.
|
|
- **path:** Path to the directory where files to publish are stored (optional, default: `dist`)
|
|
- **source_name:** Name of the source package to publish (optional, default: all `changes` files are will be publish)
|
|
- **max_retries:** The number of retry in case of error calling the Aptly API (optional, default: no retry)
|
|
- **force_overwrite:** When publishing, overwrite files in `pool/` directory without notice (optional, default: false)
|
|
|
|
## With Gitlab CI
|
|
|
|
The following pipeline configuration demonstrates a simple usage to build and publish a debian package:
|
|
|
|
```yaml
|
|
stages:
|
|
- build
|
|
- publish
|
|
|
|
build:
|
|
image: debian:11
|
|
stage: build
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
script:
|
|
- ./build.sh
|
|
artifacts:
|
|
paths:
|
|
- dist/*
|
|
|
|
publish:
|
|
image:
|
|
name: brenard/aptly-publish:latest
|
|
entrypoint: ["/bin/sh", "-c"]
|
|
stage: publish
|
|
variables:
|
|
APTLY_API_URL: "https://your.aptly.tld/api"
|
|
APTLY_API_USERNAME: myproject
|
|
APTLY_PREFIX: "debian"
|
|
APTLY_REPO_COMPONENT: "main"
|
|
APTLY_REPO_NAME: "debian_stable_main"
|
|
APTLY_PATH: "dist"
|
|
APTLY_SOURCE_NAME: "myproject"
|
|
APTLY_MAX_RETRIES: 2
|
|
APTLY_FORCE_OVERWRITE: true
|
|
script:
|
|
- echo "Publish Bullseye debian packages on APT repository..."
|
|
- aptly-publish
|
|
needs:
|
|
- "build"
|
|
rules:
|
|
- if: $CI_COMMIT_TAG
|
|
```
|
|
|
|
The parameters are passed using environment variables as designed with a Woodpecker CI plugin. Consequently, you could refer to the previous section for details about these parameters. For the password to request Aptly API, you have to set the `APTLY_API_PASSWORD` CI variable in your Gitlab project configuration (be sure to check _Masked variable_).
|
|
|
|
## With Forgejo Actions
|
|
|
|
The following workflow configuration demonstrates a simple usage to build and publish a debian package:
|
|
|
|
```yaml
|
|
---
|
|
name: Build and publish forgejo-runner Debian package
|
|
on: [create]
|
|
jobs:
|
|
build:
|
|
steps:
|
|
- name: Check out repository code
|
|
uses: actions/checkout@v4
|
|
- name: Build Debian package
|
|
run: ./build.sh
|
|
- name: Upload Debian package files
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: dist
|
|
path: |
|
|
dist/*.buildinfo
|
|
dist/*.changes
|
|
dist/*.deb
|
|
dist/*.dsc
|
|
dist/*.tar.gz
|
|
|
|
publish:
|
|
runs-on: docker
|
|
container:
|
|
image: docker.io/brenard/aptly-publish:latest
|
|
steps:
|
|
- name: "Download Debian package files"
|
|
uses: actions/download-artifact@v3
|
|
with:
|
|
name: dist
|
|
|
|
- name: "Publish Debian package on Aptly repository"
|
|
uses: https://gitea.zionetrix.net/bn8/aptly-publish@master
|
|
with:
|
|
api_url: https://your.aptly.tld/api
|
|
api_username: myproject
|
|
api_password: ${{ secrets.APTLY_API_PASSWORD }}
|
|
prefix: debian
|
|
repo_component: main
|
|
repo_name: debian_stable_main
|
|
path: "./"
|
|
source_name: myproject
|
|
max_retries: 2
|
|
force_overwrite: true
|
|
```
|
|
|
|
The parameters are passed using environment variables as designed with a Woodpecker CI plugin. Consequently, you could refer to the previous section for details about these parameters. For the password to request Aptly API, you have to set the `APTLY_API_PASSWORD` Actions secret in your Forgejo project configuration.
|