发布流水线#

要进行发布,需要在项目仓库中设置一个 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.>
  1. 确保发布任务仅在构建任务完成后且成功后触发。

  2. 生成发布 tarball 的任务。每个项目都会有所不同。您可以使用预先存在的创建发布 tarball 的任务。

  3. 确保您的 dist tarball 作为任务工件导出。您必须使用“public-dist”作为名称,或者覆盖组件中的 tarball-artifact-path 输入。

流水线执行的步骤

  1. 流水线定义全局变量。

  2. 流水线包含发布服务组件并设置必要的输入。

  3. 流水线构建项目,生成发布 tarball 并将其作为工件上传。

  4. 触发包含的组件的内部操作,这将把 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 上。

  • 项目必须是 GNOMEIncubator 组的一部分。

  • 必须通过标签触发流水线。

  • 标签必须是 受保护的,以便只有维护者才能创建它。这会自动为 GNOME 组中的所有项目完成。

  • 发布 tarball 的名称必须采用 $CI_PROJECT_NAME-$CI_COMMIT_TAG.tar.xz 格式,其中 $CI_PROJECT_NAME 是项目名称,$CI_COMMIT_TAG 是标签名称(了解更多)。