发布流水线#
要进行发布,需要在项目仓库中设置一个 GitLab CI/CD 流水线。此流水线需要能够生成发布 tarball 并将其上传到 GNOME 服务器。以下说明将帮助您为尚未拥有流水线的新的 GNOME 项目设置新的发布流水线。
将包含 CI/CD 流水线配置的 .gitlab-ci.yml 文件放置在项目根目录中(了解更多)。配置是项目特定的,应根据项目的需求进行调整,但强烈建议使用 GNOME 发布团队准备的 CI/CD 组件。
一个最小的 .gitlab-ci.yml 文件示例#
include:
- component: "gitlab.gnome.org/GNOME/citemplates/release-service@master"
inputs:
job-stage: "release"
dist-job-name: "build-release-tarball" # <1.>
stages:
- "build"
- "release"
build-release-tarball: # <2.>
stage: "build"
variables:
MESON_BUILD_DIR: "_build"
script:
- meson setup "${MESON_BUILD_DIR}"
- meson dist -C "${MESON_BUILD_DIR}" --include-subprojects
- cp -r "${MESON_BUILD_DIR}/meson-dist/" "${CI_PROJECT_DIR}/public-dist/"
artifacts:
name: "${CI_JOB_NAME}-${CI_COMMIT_REF_NAME}"
when: "always"
paths:
- "public-dist" # <3.>
确保发布任务仅在构建任务完成后且成功后触发。
生成发布 tarball 的任务。每个项目都会有所不同。您可以使用预先存在的创建发布 tarball 的任务。
确保您的 dist tarball 作为任务工件导出。您必须使用“public-dist”作为名称,或者覆盖组件中的 tarball-artifact-path 输入。
流水线执行的步骤
流水线定义全局变量。
流水线包含发布服务组件并设置必要的输入。
流水线构建项目,生成发布 tarball 并将其作为工件上传。
触发包含的组件的内部操作,这将把 tarball 上传到 GNOME 服务器。
如果您的应用程序已经在使用 Flatpak CI 模板,它已经为您创建了发布 Tarball。
gnome-font-viewer 的 `.gitlab-ci.yml 示例
include:
- project: "gnome/citemplates"
file: "flatpak/flatpak_ci_initiative.yml"
- component: "gitlab.gnome.org/GNOME/citemplates/release-service@master"
inputs:
dist-job-name: "flatpak"
flatpak:
extends: '.flatpak'
variables:
MANIFEST_PATH: 'build-aux/flatpak/org.gnome.font-viewerDevel.json'
RUNTIME_REPO: 'https://sdk.gnome.org/gnome-nightly.flatpakrepo'
FLATPAK_MODULE: "gnome-font-viewer"
APP_ID: 'org.gnome.font-viewerDevel'
BUNDLE: 'org.gnome.font-viewerDevel.flatpak'
nightly:
extends: '.publish_nightly'
dependencies: ['flatpak']
needs: ['flatpak']
只有通过受保护的 Git 标签触发的流水线才能进行发布过程。标签用作生成和命名 tarball 的触发器。然后将 tarball 上传到 GNOME 服务器。此限制在于用于上传 tarball 的底层服务的安全约束。
GitLab 项目设置和流水线调用的要求#
项目必须托管在 GNOME GitLab 上。
必须通过标签触发流水线。
标签必须是 受保护的,以便只有维护者才能创建它。这会自动为 GNOME 组中的所有项目完成。
发布 tarball 的名称必须采用
$CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz格式,其中$CI_PROJECT_NAME是项目名称,$CI_COMMIT_TAG是标签名称(了解更多)。