Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
d334dd0
feat(ci): add gitlab ci core pipeline structure
universal-itengineer Jun 22, 2026
fecb2c8
feat(ci): add gitlab validation and scanning jobs
universal-itengineer Jun 22, 2026
71a1ec6
feat(ci): add gitlab automation and changelog jobs
universal-itengineer Jun 22, 2026
3f0c0f6
fix(ci): correct gitlab ci migration config
universal-itengineer Jun 22, 2026
6894139
fix(ci): add scripts to precache jobs
universal-itengineer Jun 23, 2026
60aef58
fix(ci): adapt gitlab jobs for shell executor
universal-itengineer Jun 23, 2026
ce756b1
fix(ci): keep gitlab api logs off stdout
universal-itengineer Jun 23, 2026
25a7e5a
fix(ci): harden gitlab helper scripts
universal-itengineer Jun 23, 2026
f34a218
fix(ci): fetch diff base for validation jobs
universal-itengineer Jun 23, 2026
56d10a9
fix(ci): correct auto-assign rules and dedupe pipelines
universal-itengineer Jun 23, 2026
005c751
fix(ci): use gohooks task name and enable Go toolchain auto-download
universal-itengineer Jun 23, 2026
c511532
fix(ci): stop svace dotenv leaking svace tag into MR build jobs
universal-itengineer Jun 23, 2026
f5a9522
fix(ci): auto-install shellcheck on runner when missing
universal-itengineer Jun 23, 2026
105a469
fix(ci): fix shellcheck download URL and tarball extraction
universal-itengineer Jun 23, 2026
8f27d45
fix(ci): use docker for lint:shellcheck, drop dead install-shellcheck
universal-itengineer Jun 23, 2026
53e4a4c
chore: formatting yaml
universal-itengineer Jun 23, 2026
af3a35b
ci(shellcheck): scan .gitlab/ci/scripts and make lint logs informative
universal-itengineer Jun 23, 2026
99ce7d0
ci(shellcheck): bump koalaman/shellcheck-alpine v0.10.0 -> v0.11.0
universal-itengineer Jun 23, 2026
7986abd
refactor(ci): split scripts into bash/ and python/ subfolders
universal-itengineer Jun 23, 2026
b7126fa
fix(ci): install helm/jq in lint:helm-templates and migrate lint_go t…
universal-itengineer Jun 23, 2026
10644e9
fix(ci): fix check:gens-files matrix for moq, bpf2go and api generate
universal-itengineer Jun 23, 2026
cbabba9
fix(ci): run vm-route-forge bpf2go generation in docker image
universal-itengineer Jun 23, 2026
3a9060f
fix(ci): use clang-14 in vm-route-forge bpf2go generation
universal-itengineer Jun 23, 2026
0752363
chore(core, vm-route-forge): regenerate bpf2go output for cilium/ebpf…
universal-itengineer Jun 23, 2026
5939231
ci(gitlab): remove TODO_RUNNER_TAG placeholders, confirm deckhouse tag
universal-itengineer Jun 24, 2026
2937855
fix(ci): wire edition/delve into dev builds, restore werf cleanup con…
universal-itengineer Jun 24, 2026
9cc081e
fix(ci): port remaining GH jobs, fix translate-changelog direction, a…
universal-itengineer Jun 24, 2026
a15fb33
update README.md
universal-itengineer Jun 24, 2026
4dcd922
fix(ci): prod release parity — MODULE_EDITION, se-plus, release-channels
universal-itengineer Jun 24, 2026
34fb28f
fix(ci): make prod:check-requirements an optional need for prod:build…
universal-itengineer Jun 24, 2026
4345fff
fix(ci): move prod_check stage before build for prod:build needs DAG
universal-itengineer Jun 24, 2026
38af604
fix(ci): add license headers and prettier-format lint:dmt/lint:yaml f…
universal-itengineer Jun 24, 2026
dd5475d
fix(ci): run unit tests on every MR push via needs DAG
universal-itengineer Jun 24, 2026
671b202
fix(ci): make manual changelog/backport jobs non-blocking on MR
universal-itengineer Jun 24, 2026
260a02e
fix(ci): build dev image on merge into release-* branches
universal-itengineer Jun 24, 2026
f921b62
fix(ci): run lint:yaml/helm-templates/gens-files/gitlab-ci on release…
universal-itengineer Jun 25, 2026
451e1a1
fix(ci): run test:scripts:js inside node:24 docker container
universal-itengineer Jun 25, 2026
b7a9902
fix(ci): run npm tests as runner-user to avoid root-owned workspace p…
universal-itengineer Jun 25, 2026
c5dd1e2
fix(ci): isolate npm tests in container tmpdir to avoid workspace pol…
universal-itengineer Jun 25, 2026
43aca6f
refactor(ci): single deploy_prod stage, drop dead gitleaks stage
universal-itengineer Jun 25, 2026
ba99b4d
refactor(ci): rename .local_build/.local_deploy to .base_build/.base_…
universal-itengineer Jun 25, 2026
30780fc
refactor(ci): group templates into base/ dev/ release/ subfolders
universal-itengineer Jun 25, 2026
e197d92
chore(ci): drop .gitlab/README.md and its references in CI files
universal-itengineer Jun 25, 2026
80a0b08
chore(ci): drop internal issue references from CI comments
universal-itengineer Jun 25, 2026
45cf5dd
fix(ci): add schedule discriminator for scheduled jobs
universal-itengineer Jun 26, 2026
58f0bd2
fix(ci): correct scheduled changelog generation
universal-itengineer Jun 26, 2026
2b40243
fix(ci): classify stuck merge requests by discussion age
universal-itengineer Jun 26, 2026
c1e638d
fix(ci): restore milestone-based backport flow
universal-itengineer Jun 26, 2026
346d214
test(ci): port real JS/Python script unit tests, drop smoke-only jobs
universal-itengineer Jun 26, 2026
92cdf8c
docs(ci): correct stale/contradictory comments in .gitlab
universal-itengineer Jun 26, 2026
40b05ce
fix(ci): correct dev-tag deploy, prod secondary_repo, and main tag
universal-itengineer Jun 26, 2026
5e18a1c
fix(ci): correct cve release-in-dev, svace status, cleanup dry-run, c…
universal-itengineer Jun 26, 2026
0514591
docs(ci): fix misplaced dedup comment in workflow.yml
universal-itengineer Jun 26, 2026
994eff9
chore(ci): drop internal planning-doc references from CI comments
universal-itengineer Jun 26, 2026
79bafa9
refactor(ci): consolidate registry-login templates and dedupe prod ta…
universal-itengineer Jun 26, 2026
c6dfc01
chore(ci): drop dead backport sweep mode and stale TODO comments
universal-itengineer Jun 26, 2026
19974db
test(ci): commit package-lock.json and use npm ci for JS tests
universal-itengineer Jun 26, 2026
3f6e57e
refactor(ci): make interruptible:true the default, override false on …
universal-itengineer Jun 26, 2026
d7b102a
docs(ci): drop upstream pin TODO, document the SHA in a comment
universal-itengineer Jun 26, 2026
d738daf
fix(ci): set mrs_notifier DOC_REVIEWER to the GitLab username
universal-itengineer Jun 26, 2026
142af9b
refactor(ci): split WERF_SECONDARY_REPO_1 into .werf_secondary_repo, …
universal-itengineer Jun 29, 2026
414b21e
refactor(ci): rename .also_login_dev_registry to .dev_registry_pull_l…
universal-itengineer Jun 29, 2026
b941a3a
fix(ci): align tag pipelines with github, drop -dev* scheme
universal-itengineer Jun 30, 2026
76a42a6
refactor(ci): extract .dev_build base for dev build jobs
universal-itengineer Jun 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
417 changes: 16 additions & 401 deletions .gitlab-ci.yml

Large diffs are not rendered by default.

55 changes: 55 additions & 0 deletions .gitlab/ci/changelog-sections.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Copyright 2026 Flant JSC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Allowed `section` values for ```changes fenced blocks in MR descriptions.
#
# This list is shared between:
# - .gitlab/ci/scripts/bash/check-changelog-entry.sh (validates MR description blocks)
# - .gitlab/ci/scripts/python/changelog_collect.py (groups changes by section)
# - .github/actions/milestone-changelog/action.yml (kept in sync during migration)
#
# Suffix `:low` pins the section to low impact_level (impact_level field becomes optional).
#
# Keep this file in byte-for-byte sync with the equivalent list in:
# .github/actions/milestone-changelog/action.yml
# .github/workflows/check-changelog-entry.yml
api
vm
vmop
vmbda
vmclass
vmip
vmipl
vdsnapshot
vmsnapshot
vmrestore
disks
vd
images
vi
cvi
core
api-service:low
vm-route-forge:low
kubevirt:low
kube-api-rewriter:low
cdi:low
dvcr:low
module
observability
ci:low
test:low
docs
network
cli
20 changes: 20 additions & 0 deletions .gitlab/ci/defaults.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Default settings applied to every job in the pipeline.
#
# This file replaces the previous root-level `default:` block. It mirrors
# the same defaults: the `deckhouse` runner tag is used everywhere, and
# resources are not pinned to a specific tag set (we leave GitLab's
# scheduling to runner tags only).
#
# `interruptible: true` is the default so that pushing a new commit cancels
# the now-redundant in-flight pipeline (the GitLab equivalent of GitHub's
# concurrency cancel-in-progress; takes effect once "Auto-cancel redundant
# pipelines" is enabled at the project level). Jobs that must NOT be cancelled
# — prod release build/deploy/release and state-mutating jobs (registry
# cleanup, changelog/backport/translate MR creation, long scheduled scans) —
# override with `interruptible: false`, mostly via the .prod_vars /
# .prod_release_rules templates.

default:
tags:
- deckhouse
interruptible: true
114 changes: 114 additions & 0 deletions .gitlab/ci/includes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# Top-level include fan-out for the deckhouse/virtualization GitLab pipeline.
#
# Order is significant: stages/variables/defaults must be loaded before any
# job file because GitLab CI merges variables and stages across all included
# documents. The Setup template from modules-gitlab-ci provides its own
# stages: [build, deploy]; we explicitly extend stages via .gitlab/ci/stages.yml
# so the final list is the union of both.
#
# Upstream template names (verified in
# deckhouse/3p/deckhouse/modules-gitlab-ci, branch v13.0, HEAD 006d51c):
# - Setup.gitlab-ci.yml (trdl + werf + ci-env + dual-registry login)
# - Build.gitlab-ci.yml (extends .build — werf build + bundle copy +
# release-channel copy + module registration)
# - Deploy.gitlab-ci.yml (extends .deploy — release-channel crane copy)
# - CVE_Scan.gitlab-ci.yml (extends .cve_scan — Trivy scan via Vault)
# - gitleaks.gitlab-ci.yml (extends .gitleaks_scan — secrets scanning)
# - Go_Checks.gitlab-ci.yml (Go lint/test helpers)
# - Translate_Changelog.gitlab-ci.yml (CHANGELOG/*.ru.yml -> EN MR)
# - Merge_Release.gitlab-ci.yml (release-label driven merge+tag+release)
# - Svace_Analayze.gitlab-ci.yml (note: typo in upstream file name)
# - Antivirus_Scan.gitlab-ci.yml (antivirus scan over recent releases)
# - Semgrep.gitlab-ci.yml (semgrep SAST)
#
# We only include the templates whose behavior is consumed by jobs owned by
# this issue (Setup, Build, Deploy). The remaining upstream templates are
# surfaced here for visibility — child issues that own cve-scan.yml,
# gitleaks.yml, etc. add the matching `include: local:` entries for the
# corresponding job files.

include:
# --- Upstream modules-gitlab-ci (deckhouse/3p, ref v13.0) ---
# Tracks the v13.0 branch so upstream fixes flow in automatically. To pin for
# reproducibility, swap the ref for the branch HEAD SHA
# (006d51c35904b434eca2045a449aafb5e37a8827 at the time of writing).
- project: "deckhouse/3p/deckhouse/modules-gitlab-ci"
ref: "v13.0"
file:
# Setup.gitlab-ci.yml provides trdl + werf setup + dual-registry
# `werf cr login` in before_script. See templates/Setup.gitlab-ci.yml.
- "/templates/Setup.gitlab-ci.yml"
# Validation/scanning jobs extend these upstream templates.
- "/templates/CVE_Scan.gitlab-ci.yml"
- "/templates/gitleaks.gitlab-ci.yml"
- "/templates/Svace_Analayze.gitlab-ci.yml"
# Build.gitlab-ci.yml and Deploy.gitlab-ci.yml are intentionally NOT
# included directly. Their hidden jobs (.build, .deploy) ship with
# `rules:` baked in (`if: $CI_COMMIT_BRANCH`, `if: $CI_COMMIT_TAG`,
# `when: manual`) that override our strict gating via
# .dev / .dev_tags / .main / .prod_manual. We mirror the upstream
# script bodies in .gitlab/ci/templates/base/{build,deploy}.yml as
# `.base_build` and `.base_deploy` and extend those instead.

# --- Local structural fragments (order: stages, vars, defaults, then jobs) ---
- local: ".gitlab/ci/stages.yml"
- local: ".gitlab/ci/variables.yml"
- local: ".gitlab/ci/defaults.yml"
- local: ".gitlab/ci/workflow.yml"

# --- Local shared templates (extends: ...) ---
# templates/ is grouped by the two global processes plus shared base:
# base/ - process-agnostic base job bodies + helpers
# dev/ - development process (DEV registry): MR / main / release / dev-tag
# release/ - release process (PROD registry): tag-push + manual dispatch
# Anchor names are unchanged (.base_build, .dev, .prod_vars, ...), so no job
# `extends:` edits are needed.
# Registry-login helpers must load before dev_vars/prod_vars, which extend
# them (.login_dev_registry / .login_prod_registry).
- local: ".gitlab/ci/templates/base/registry-login.yml"
- local: ".gitlab/ci/templates/dev/dev_vars.yml"
- local: ".gitlab/ci/templates/release/prod_vars.yml"
- local: ".gitlab/ci/templates/dev/dev.yml"
- local: ".gitlab/ci/templates/dev/dev_tags.yml"
- local: ".gitlab/ci/templates/dev/main.yml"
- local: ".gitlab/ci/templates/dev/release.yml"
- local: ".gitlab/ci/templates/release/prod_tag.yml"
- local: ".gitlab/ci/templates/base/info.yml"
- local: ".gitlab/ci/templates/base/build.yml"
- local: ".gitlab/ci/templates/base/deploy.yml"

# --- Local job files owned by this issue ---
- local: ".gitlab/ci/jobs/info.yml"
- local: ".gitlab/ci/jobs/test.yml"
- local: ".gitlab/ci/jobs/test-scripts-js.yml"
- local: ".gitlab/ci/jobs/test-scripts-python.yml"
- local: ".gitlab/ci/jobs/test-d8v-cli.yml"
- local: ".gitlab/ci/jobs/build-dev.yml"
- local: ".gitlab/ci/jobs/build-prod.yml"
# No deploy-dev.yml: the DEV registry has no release channels (only tags),
# so a dev tag is just built (build_dev_tags) and never crane-copied into
# alpha/beta/... The GitHub "Deploy Dev" workflow
# (dev_module_build-and-registration.yml) is build-only as well.
- local: ".gitlab/ci/jobs/deploy-prod.yml"
# Prod release-channels parity flow (manual single-channel dispatch):
# requirements check, build/deploy per edition, version verification,
# GitLab release creation, Loop notification.
- local: ".gitlab/ci/jobs/release-channels.yml"
- local: ".gitlab/ci/jobs/cleanup.yml"

# --- Local validation and scanning jobs ---
- local: ".gitlab/ci/jobs/lint-dmt.yml"
- local: ".gitlab/ci/jobs/lint-validate.yml"
- local: ".gitlab/ci/jobs/precache.yml"
- local: ".gitlab/ci/jobs/svace.yml"
- local: ".gitlab/ci/jobs/cve-scan.yml"
- local: ".gitlab/ci/jobs/gitleaks.yml"

# --- Local GitLab API automation, changelog, backport, and manual tools ---
- local: ".gitlab/ci/jobs/auto-assign-author.yml"
- local: ".gitlab/ci/jobs/backport.yml"
- local: ".gitlab/ci/jobs/changelog.yml"
- local: ".gitlab/ci/jobs/check-changelog.yml"
- local: ".gitlab/ci/jobs/check-milestone.yml"
- local: ".gitlab/ci/jobs/manual-tools.yml"
- local: ".gitlab/ci/jobs/translate-changelog.yml"
35 changes: 35 additions & 0 deletions .gitlab/ci/jobs/auto-assign-author.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2026 Flant JSC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-assign MR author as MR assignee (GitLab API).
#
# Migration of .github/workflows/dev_auto-pr-author-assign.yml.
# Behaviour: if MR already has an assignee, skip.
# Required CI/CD variable: GITLAB_API_TOKEN (Project Access Token, scope api).

auto-assign-author:
stage: info
tags:
- deckhouse
before_script:
- bash .gitlab/ci/scripts/bash/check-runner-tools.sh bash curl jq
script:
- bash .gitlab/ci/scripts/bash/auto-assign-author.sh
rules:
# Run on every MR pipeline. The script is idempotent: it skips when the MR
# already has an assignee, so re-running on each push is harmless. Gating on
# changes: to this job's own files (the previous behaviour) was wrong — it
# meant the author was only auto-assigned when the auto-assign files changed,
# which never happens on normal MRs.
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
65 changes: 65 additions & 0 deletions .gitlab/ci/jobs/backport.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright 2026 Flant JSC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Backport a merged MR to a release branch (clone + cherry-pick + push + MR).
#
# Migration of .github/workflows/on-pull-request-backport.yml which used
# deckhouse/backport-action@v1.0.0 with automerge=true and direct push to
# the release branch. We open a reviewable backport MR instead of pushing
# directly.
#
# Triggers:
# 1. Manual pipeline (Run pipeline UI) with variable TARGET_BRANCH=release-1.21.
# 2. Manual pipeline on an MR carrying the `status/backport` label.
# GitLab does NOT auto-trigger pipelines on label change; the user must
# press "Run pipeline" on the MR. Webhook-driven auto-trigger is an
# accepted permanent gap (no webhook-listener will be built).
# The target branch is derived from the source MR milestone title
# (vX.Y.Z or X.Y.Z -> release-X.Y); TARGET_BRANCH overrides this.
#
# After the backport job finishes, backport.sh updates the source MR:
# - always removes `status/backport`;
# - on success adds `status/backport/success` and comments with the
# backport MR link;
# - on failure adds `status/backport/failed` and comments with the job link.
#
# Required CI/CD variable: GITLAB_API_TOKEN (Project Access Token, scope api).

backport:
stage: lint
# Mutates state (cherry-pick + opens an MR); never auto-cancel mid-run.
interruptible: false
tags:
- deckhouse
before_script:
- bash .gitlab/ci/scripts/bash/check-runner-tools.sh bash git curl jq ssh-agent ssh-add
script:
- bash .gitlab/ci/scripts/bash/backport.sh
# allow_failure: true on every rule: `when: manual` inside `rules:` defaults
# to allow_failure: false, so on an MR carrying the `status/backport` label
# this unplayed manual job would block the whole MR pipeline (test/build/...).
# Backport is an opt-in side action, so it must never gate the pipeline.
rules:
# Mode 1: explicit manual run with TARGET_BRANCH provided via UI (overrides
# milestone-based inference).
- if: $TARGET_BRANCH
when: manual
allow_failure: true
# Mode 2: MR with the `status/backport` label. GitLab does NOT auto-run
# pipelines on label change; user has to press "Run pipeline" on the MR
# (webhook auto-trigger is an accepted permanent gap, not planned). The
# target branch is derived from the source MR milestone by backport.sh.
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,\s*)status\/backport(,|$)/
when: manual
allow_failure: true
75 changes: 75 additions & 0 deletions .gitlab/ci/jobs/build-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# DEV build jobs.
#
# Four jobs build the module into the DEV registry, one per pipeline context:
# build_dev MR pipelines (.dev, tag mr<iid>)
# build_dev_tags vX.Y.Z / -rc.N tag (.dev_tags, tag = the tag name)
# build_main push to main (.main, tag main)
# build_release push to release-X.Y (.release, tag = branch name)
#
# They are IDENTICAL except for that context template (which supplies
# MODULES_MODULE_TAG + the trigger rule), so the common body lives once in the
# hidden `.dev_build` base below and each job is just `extends: [.dev_build,
# <context>]`. The four jobs are kept distinct (not collapsed into one job with
# rule-variables) so each context shows up as its own named, independently
# retriable job in the pipeline UI.
#
# .dev / .main are intentionally NOT folded into .dev_build: they are reused as
# context mixins by other jobs (tests, lint:dmt, show_*_manifest, precache), so
# they must stay standalone. .dev_tags / .release are build-only today.

# Shared base for the DEV-registry build jobs.
#
# - .base_build (this repo): same body as upstream modules-gitlab-ci
# Build.gitlab-ci.yml `.build` (werf build --save-build-report + bundle crane
# copy + release-channel crane copy + crane append to register the module),
# without the upstream `rules:` that would override our strict gating. Upstream
# uses WERF_REPO env instead of an explicit --repo flag, equivalent here
# because MODULES_MODULE_SOURCE is the same.
#
# - `needs: [set_vars]` (with artifacts) opts these jobs into DAG mode and pulls
# ONLY the set_vars dotenv (MODULE_EDITION, DEBUG_COMPONENT, RELEASE_IN_DEV).
# It replaces a bare `needs: []` whose purpose was to stop GitLab's legacy
# behavior of downloading ALL prior-stage artifacts and leaking unrelated
# dotenv (e.g. svace:set-vars writes MODULES_MODULE_TAG=<branch>-svace, which
# would override the per-context MODULES_MODULE_TAG). Listing set_vars
# explicitly keeps that protection; set_vars does NOT emit MODULES_MODULE_TAG,
# so the per-context tag from .dev / .dev_tags / .main / .release is preserved.
#
# - WERF_VIRTUAL_MERGE=0 mirrors the GitHub dev_setup_build job env.
#
# - interruptible: true is inherited from the global default
# (.gitlab/ci/defaults.yml), so a new push to the same MR/branch cancels the
# older in-flight build.
.dev_build:
stage: build
needs:
- job: set_vars
artifacts: true
variables:
WERF_VIRTUAL_MERGE: "0"
extends:
- .base_build

build_dev:
extends:
- .dev_build
- .dev

build_dev_tags:
extends:
- .dev_build
- .dev_tags

build_main:
extends:
- .dev_build
- .main

# build_release mirrors GitHub dev_module_build.yml `push: [release-*]`: a
# squash-merge into a release-X.Y branch rebuilds the dev image tagged with the
# branch name. Without this job GitLab created a pipeline on the merge push but
# built nothing for release branches.
build_release:
extends:
- .dev_build
- .release
Loading
Loading