From 9d10faf07a2bbc82a2ab04141b1970db30790577 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Mon, 26 Jan 2026 17:46:46 +0100 Subject: [PATCH 01/12] IONOS(ci): update branch to GitLab trigger mapping for clarity Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index 88b8b3244831f..e0237674102a9 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -758,12 +758,16 @@ jobs: - name: Upload build to artifactory id: artifactory_upload run: | - # PR builds are stored in a separate directory as "dev/pr/nextcloud-workspace-pr-.zip" - # Push to "ionos-dev" branch is stored as "dev/nextcloud-workspace-.zip" + # Artifactory Build Storage Structure: + # | Branch/Event | Stage Prefix | Artifact Path | + # |------------------|----------------|----------------------------------------------------| + # | Pull Request | dev | dev/pr/nextcloud-workspace-pr-.zip | + # | ionos-dev | dev | dev/nextcloud-workspace-.zip | + # | ionos-stable | stable | stable/nextcloud-workspace-.zip | ARTIFACTORY_STAGE_PREFIX="dev" - # set ARTIFACTORY_STAGE_PREFIX=stable on ionos-stable branch + # Set stage prefix based on branch if [ "${{ github.ref_name }}" == "ionos-stable" ]; then ARTIFACTORY_STAGE_PREFIX="stable" fi @@ -923,9 +927,12 @@ jobs: # Enable command echo for debugging purposes set -x - # Determine build type based on branch: - # - 'ionos-dev' branch triggers 'dev' build type - # - 'ionos-stable' branch triggers 'stable' build type + # Branch to GitLab Trigger Mapping: + # | ref_name | GITLAB_REF | BUILD_TYPE | + # |--------------|--------------|-------------| + # | ionos-dev | stable | dev | + # | ionos-stable | stable | stable | + BUILD_TYPE="dev" # Override build type for stable branch From aee69d0e5e44318e216729b512310df5df7a1c63 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Tue, 27 Jan 2026 11:14:09 +0100 Subject: [PATCH 02/12] IONOS(ci): reformat branch validation for GitHub workflow triggers in order to extend it later Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index e0237674102a9..bc18d6e1f3b5a 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -142,7 +142,9 @@ jobs: echo " ✅ Event type is 'push'" fi - if [ "${{ github.ref_name }}" != "ionos-dev" ] && [ "${{ github.ref_name }}" != "ionos-stable" ]; then + # Check if branch matches expected patterns: ionos-dev, ionos-stable + if [ "${{ github.ref_name }}" != "ionos-dev" ] && \ + [ "${{ github.ref_name }}" != "ionos-stable" ]; then echo "- ❌ Branch must be 'ionos-dev' or 'ionos-stable' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev' or 'ionos-stable')" WILL_TRIGGER=false From d815ef67b24ff1b08615619dfe599f87f6c5d599 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Mon, 26 Jan 2026 17:35:54 +0100 Subject: [PATCH 03/12] IONOS(ci): Change GitLab ref from 'stable' to 'main' Update trigger-remote-dev-workflow to target the main branch in GitLab for branch types (ionos-dev, ionos-stable). This aligns with the GitLab repository structure where main is the target branch for container image builds. Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index bc18d6e1f3b5a..8b59aee04d518 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -932,8 +932,8 @@ jobs: # Branch to GitLab Trigger Mapping: # | ref_name | GITLAB_REF | BUILD_TYPE | # |--------------|--------------|-------------| - # | ionos-dev | stable | dev | - # | ionos-stable | stable | stable | + # | ionos-dev | main | dev | + # | ionos-stable | main | stable | BUILD_TYPE="dev" @@ -962,7 +962,7 @@ jobs: --fail-with-body \ -o response.json \ --form token=${{ secrets.GITLAB_TOKEN }} \ - --form ref="stable" \ + --form ref="main" \ --form "variables[GITHUB_SHA]=${{ github.sha }}" \ --form "variables[ARTIFACTORY_LAST_BUILD_PATH]=${{ needs.upload-to-artifactory.outputs.ARTIFACTORY_LAST_BUILD_PATH }}" \ --form "variables[NC_VERSION]=${{ needs.build-artifact.outputs.NC_VERSION }}" \ From e8114f29921a03880bd4250d0970c3fe7a58240c Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Mon, 26 Jan 2026 17:36:28 +0100 Subject: [PATCH 04/12] IONOS(ci): Implement complete rc/* branch support Add full CI/CD pipeline support for release candidate (rc/*) branches across all workflow stages: Workflow Triggers: - Add 'rc/**' pattern to push trigger branches - Update concurrency group to prevent rc/* builds from interfering Branch Validation: - Extend configuration check to recognize rc/* as valid trigger branch - Update validation messages to include rc/* in expected patterns Artifactory Integration: - Enable artifact upload for rc/* branches - Create separate 'rc/' directory for rc/* build artifacts - Set ARTIFACTORY_STAGE_PREFIX='rc' for proper organization GitLab Pipeline Integration: - Set BUILD_TYPE='rc' for rc/* branch builds - Update trigger conditions to include rc/* branches - Add rc/* to branch-to-GitLab mapping documentation table This provides complete parity with ionos-dev and ionos-stable branches, enabling proper release candidate workflow with isolated artifacts. --- .github/workflows/build-artifact.yml | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index 8b59aee04d518..d32821c483749 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -31,6 +31,7 @@ on: branches: - ionos-dev - ionos-stable + - 'rc/**' workflow_dispatch: # Manual trigger to bypass all caches inputs: force_rebuild: @@ -50,7 +51,7 @@ on: default: '' concurrency: - group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/ionos-dev' && github.run_id || github.event.pull_request.number || github.ref }} + group: ${{ github.workflow }}-${{ (github.ref == 'refs/heads/ionos-dev' || startsWith(github.ref, 'refs/heads/rc/')) && github.run_id || github.event.pull_request.number || github.ref }} cancel-in-progress: true env: @@ -142,11 +143,12 @@ jobs: echo " ✅ Event type is 'push'" fi - # Check if branch matches expected patterns: ionos-dev, ionos-stable + # Check if branch matches expected patterns: ionos-dev, ionos-stable, or rc/* if [ "${{ github.ref_name }}" != "ionos-dev" ] && \ - [ "${{ github.ref_name }}" != "ionos-stable" ]; then - echo "- ❌ Branch must be 'ionos-dev' or 'ionos-stable' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY - echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev' or 'ionos-stable')" + [ "${{ github.ref_name }}" != "ionos-stable" ] && \ + [[ ! "${{ github.ref_name }}" =~ ^rc/ ]]; then + echo "- ❌ Branch must be 'ionos-dev', 'ionos-stable', or 'rc/*' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY + echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev', 'ionos-stable', or 'rc/*')" WILL_TRIGGER=false else echo "- ✅ Branch is '\`${{ github.ref_name }}\`'" >> $GITHUB_STEP_SUMMARY @@ -678,10 +680,10 @@ jobs: upload-to-artifactory: runs-on: self-hosted - # Upload the artifact to the Artifactory repository on PR *OR* on "ionos-dev|ionos-stable" branch push defined in the on:push:branches + # Upload the artifact to the Artifactory repository on PR *OR* on "ionos-dev|ionos-stable|rc/*" branch push defined in the on:push:branches if: | always() && - (github.event_name == 'pull_request' || github.ref_name == 'ionos-dev' || github.ref_name == 'ionos-stable') && + (github.event_name == 'pull_request' || github.ref_name == 'ionos-dev' || github.ref_name == 'ionos-stable' || startsWith(github.ref_name, 'rc/')) && needs.prepare-matrix.result == 'success' && (needs.build-external-apps.result == 'success' || needs.build-external-apps.result == 'skipped') && needs.build-artifact.result == 'success' @@ -766,12 +768,16 @@ jobs: # | Pull Request | dev | dev/pr/nextcloud-workspace-pr-.zip | # | ionos-dev | dev | dev/nextcloud-workspace-.zip | # | ionos-stable | stable | stable/nextcloud-workspace-.zip | + # | rc/* | rc | rc/nextcloud-workspace-.zip | ARTIFACTORY_STAGE_PREFIX="dev" # Set stage prefix based on branch if [ "${{ github.ref_name }}" == "ionos-stable" ]; then ARTIFACTORY_STAGE_PREFIX="stable" + # set ARTIFACTORY_STAGE_PREFIX=rc on rc/* branches + elif [[ "${{ github.ref_name }}" =~ ^rc/ ]]; then + ARTIFACTORY_STAGE_PREFIX="rc" fi export PATH_TO_DIRECTORY="${{ env.ARTIFACTORY_REPOSITORY_SNAPSHOT }}/${ARTIFACTORY_STAGE_PREFIX}" @@ -914,13 +920,13 @@ jobs: name: Trigger remote workflow needs: [upload-to-artifactory] - # Trigger remote build on "ionos-dev|ionos-stable" branch *push* defined in the on:push:branches + # Trigger remote build on "ionos-dev|ionos-stable|rc/*" branch *push* defined in the on:push:branches # Can be disabled via repository variable 'DISABLE_REMOTE_TRIGGER' (set to 'true' to disable) # Configure at: https://github.com/IONOS-Productivity/ncw-server/settings/variables/actions if: | always() && github.event_name == 'push' && - (github.ref_name == 'ionos-dev' || github.ref_name == 'ionos-stable') && + (github.ref_name == 'ionos-dev' || github.ref_name == 'ionos-stable' || startsWith(github.ref_name, 'rc/')) && needs.upload-to-artifactory.result == 'success' && vars.DISABLE_REMOTE_TRIGGER != 'true' steps: @@ -934,12 +940,16 @@ jobs: # |--------------|--------------|-------------| # | ionos-dev | main | dev | # | ionos-stable | main | stable | + # | rc/* | main | rc | BUILD_TYPE="dev" # Override build type for stable branch if [ "${{ github.ref_name }}" == "ionos-stable" ]; then BUILD_TYPE="stable" + # Override build type for rc/* branches + elif [[ "${{ github.ref_name }}" =~ ^rc/ ]]; then + BUILD_TYPE="rc" fi # Construct source build URL for traceability From 840571968b83253758b8e25fcffafbe6adb90515 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Tue, 27 Jan 2026 12:20:09 +0100 Subject: [PATCH 05/12] IONOS(ci): Fix concurrency control for pull requests and push branches - Pull requests now properly cancel previous runs using explicit PR number - ionos-dev, ionos-stable, and rc/* branches use unique run IDs (no cancellation) - Each production branch build completes independently without cancellation - Other branches continue to use ref-based grouping with cancellation This ensures PR builds are cancelled on new pushes, while production branch builds always complete to avoid losing build artifacts. Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index d32821c483749..4be92f72ddd71 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -51,7 +51,7 @@ on: default: '' concurrency: - group: ${{ github.workflow }}-${{ (github.ref == 'refs/heads/ionos-dev' || startsWith(github.ref, 'refs/heads/rc/')) && github.run_id || github.event.pull_request.number || github.ref }} + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || ((github.ref == 'refs/heads/ionos-dev' || github.ref == 'refs/heads/ionos-stable' || startsWith(github.ref, 'refs/heads/rc/')) && github.run_id || github.ref) }} cancel-in-progress: true env: From 471e7119c014ca7782b32e945aebc46435285794 Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Tue, 27 Jan 2026 14:18:11 +0100 Subject: [PATCH 06/12] IONOS(ci): Add prerequisites validation to trigger-remote-dev-workflow - Add build-artifact to needs array to ensure NC_VERSION output is available - Update if condition to verify both build-artifact and upload-to-artifactory succeeded - Add comprehensive validation step that checks all required variables before triggering remote workflow - Validates secrets (GITLAB_TOKEN, GITLAB_TRIGGER_URL) - Validates job outputs (NC_VERSION, ARTIFACTORY_LAST_BUILD_PATH) - Validates GitHub context variables (sha, run_id, ref_name) - Abort with error if any required variable is missing This prevents the remote workflow from being triggered with missing critical variables like NC_VERSION, which was previously not available because build-artifact was not in the needs array. Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 63 +++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index 4be92f72ddd71..f78a311a1a2e9 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -919,7 +919,7 @@ jobs: runs-on: self-hosted name: Trigger remote workflow - needs: [upload-to-artifactory] + needs: [build-artifact, upload-to-artifactory] # Trigger remote build on "ionos-dev|ionos-stable|rc/*" branch *push* defined in the on:push:branches # Can be disabled via repository variable 'DISABLE_REMOTE_TRIGGER' (set to 'true' to disable) # Configure at: https://github.com/IONOS-Productivity/ncw-server/settings/variables/actions @@ -927,9 +927,70 @@ jobs: always() && github.event_name == 'push' && (github.ref_name == 'ionos-dev' || github.ref_name == 'ionos-stable' || startsWith(github.ref_name, 'rc/')) && + needs.build-artifact.result == 'success' && needs.upload-to-artifactory.result == 'success' && vars.DISABLE_REMOTE_TRIGGER != 'true' steps: + - name: Check prerequisites + run: | + echo "Checking if all required variables are set..." + error_count=0 + + # Check secrets + if [ -z "${{ secrets.GITLAB_TOKEN }}" ]; then + echo "::error::GITLAB_TOKEN secret is not set" + error_count=$((error_count + 1)) + fi + + if [ -z "${{ secrets.GITLAB_TRIGGER_URL }}" ]; then + echo "::error::GITLAB_TRIGGER_URL secret is not set" + error_count=$((error_count + 1)) + fi + + # Check required outputs from previous jobs + if [ -z "${{ needs.build-artifact.outputs.NC_VERSION }}" ]; then + echo "::error::NC_VERSION output from build-artifact job is not set" + error_count=$((error_count + 1)) + else + echo "✓ NC_VERSION: ${{ needs.build-artifact.outputs.NC_VERSION }}" + fi + + if [ -z "${{ needs.upload-to-artifactory.outputs.ARTIFACTORY_LAST_BUILD_PATH }}" ]; then + echo "::error::ARTIFACTORY_LAST_BUILD_PATH output from upload-to-artifactory job is not set" + error_count=$((error_count + 1)) + else + echo "✓ ARTIFACTORY_LAST_BUILD_PATH: ${{ needs.upload-to-artifactory.outputs.ARTIFACTORY_LAST_BUILD_PATH }}" + fi + + # Check GitHub context variables + if [ -z "${{ github.sha }}" ]; then + echo "::error::github.sha is not set" + error_count=$((error_count + 1)) + else + echo "✓ GITHUB_SHA: ${{ github.sha }}" + fi + + if [ -z "${{ github.run_id }}" ]; then + echo "::error::github.run_id is not set" + error_count=$((error_count + 1)) + else + echo "✓ BUILD_ID: ${{ github.run_id }}" + fi + + if [ -z "${{ github.ref_name }}" ]; then + echo "::error::github.ref_name is not set" + error_count=$((error_count + 1)) + else + echo "✓ BRANCH: ${{ github.ref_name }}" + fi + + # Abort if any required variable is not set + if [ $error_count -ne 0 ]; then + echo "::error::Required variables are not set. Aborting." + exit 1 + fi + + echo "✅ All required variables are set" - name: Trigger remote workflow run: | # Enable command echo for debugging purposes From 1f4bb385d43f851dd94b779fb4668e084361b1ec Mon Sep 17 00:00:00 2001 From: "Misha M.-Kupriyanov" Date: Tue, 27 Jan 2026 14:28:32 +0100 Subject: [PATCH 07/12] IONOS(ci): Update Artifactory path structure to include version and SHA - Change path from flat structure to versioned hierarchy with SHA - For branches: use /ncw-//nextcloud-workspace-.zip - For PRs: keep simple dev/pr/nextcloud-workspace-pr-.zip - Extract short SHA (first 7 characters) from commit SHA This ensures each build gets a unique path based on both NC version and commit, preventing accidental reuse of artifacts built from different commits with the same version number. Makes it easier to identify and trace artifacts back to their source commit. Signed-off-by: Misha M.-Kupriyanov --- .github/workflows/build-artifact.yml | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index f78a311a1a2e9..8f62835d9b040 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -763,12 +763,12 @@ jobs: id: artifactory_upload run: | # Artifactory Build Storage Structure: - # | Branch/Event | Stage Prefix | Artifact Path | - # |------------------|----------------|----------------------------------------------------| - # | Pull Request | dev | dev/pr/nextcloud-workspace-pr-.zip | - # | ionos-dev | dev | dev/nextcloud-workspace-.zip | - # | ionos-stable | stable | stable/nextcloud-workspace-.zip | - # | rc/* | rc | rc/nextcloud-workspace-.zip | + # | Branch/Event | Stage Prefix | Artifact Path | + # |------------------|----------------|--------------------------------------------------------------------------| + # | Pull Request | dev | dev/pr/nextcloud-workspace-pr-.zip | + # | ionos-dev | dev | dev/ncw-//nextcloud-workspace-.zip | + # | ionos-stable | stable | stable/ncw-//nextcloud-workspace-.zip | + # | rc/* | rc | rc/ncw-//nextcloud-workspace-.zip | ARTIFACTORY_STAGE_PREFIX="dev" @@ -781,10 +781,18 @@ jobs: fi export PATH_TO_DIRECTORY="${{ env.ARTIFACTORY_REPOSITORY_SNAPSHOT }}/${ARTIFACTORY_STAGE_PREFIX}" - PATH_TO_FILE="pr/nextcloud-workspace-pr-${{ github.event.pull_request.number }}.zip" - if [ -z "${{ github.event.pull_request.number }}" ]; then - PATH_TO_FILE="nextcloud-workspace-${{ needs.build-artifact.outputs.NC_VERSION }}.zip" + # For PR: use simple pr/ path + # For branches: use ncw-// structure to ensure unique paths + if [ -n "${{ github.event.pull_request.number }}" ]; then + PATH_TO_FILE="pr/nextcloud-workspace-pr-${{ github.event.pull_request.number }}.zip" + else + # Extract short SHA (first 7 characters) + SHORT_SHA="${{ github.sha }}" + SHORT_SHA="${SHORT_SHA:0:7}" + NC_VERSION="${{ needs.build-artifact.outputs.NC_VERSION }}" + + PATH_TO_FILE="ncw-${NC_VERSION}/${SHORT_SHA}/nextcloud-workspace-${NC_VERSION}.zip" fi export PATH_TO_LATEST_ARTIFACT="${PATH_TO_DIRECTORY}/${PATH_TO_FILE}" From a54d0537b61af23f3547bec6b98739a42b1b2e65 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:54:04 +0000 Subject: [PATCH 08/12] Initial plan From 00c2f826bc1980302d980e66e51c22890fe273f8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:56:45 +0000 Subject: [PATCH 09/12] IONOS(ci): Improve concurrency group readability and consolidate branch validation Co-authored-by: printminion-co <145785698+printminion-co@users.noreply.github.com> --- .github/workflows/build-artifact.yml | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index 8f62835d9b040..db6d73f23f909 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -51,7 +51,19 @@ on: default: '' concurrency: - group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || ((github.ref == 'refs/heads/ionos-dev' || github.ref == 'refs/heads/ionos-stable' || startsWith(github.ref, 'refs/heads/rc/')) && github.run_id || github.ref) }} + group: >- + ${{ github.workflow }}-${{ + github.event_name == 'pull_request' + && format('pr-{0}', github.event.pull_request.number) + || ( + ( + contains(fromJson('["refs/heads/ionos-dev","refs/heads/ionos-stable"]'), github.ref) + || startsWith(github.ref, 'refs/heads/rc/') + ) + && github.run_id + || github.ref + ) + }} cancel-in-progress: true env: @@ -144,9 +156,8 @@ jobs: fi # Check if branch matches expected patterns: ionos-dev, ionos-stable, or rc/* - if [ "${{ github.ref_name }}" != "ionos-dev" ] && \ - [ "${{ github.ref_name }}" != "ionos-stable" ] && \ - [[ ! "${{ github.ref_name }}" =~ ^rc/ ]]; then + VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable|rc/)' + if [[ ! "${{ github.ref_name }}" =~ $VALID_BRANCH_PATTERN ]]; then echo "- ❌ Branch must be 'ionos-dev', 'ionos-stable', or 'rc/*' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev', 'ionos-stable', or 'rc/*')" WILL_TRIGGER=false From 50e6aa9289377a0afbb1fa5029d94db88f9eb138 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:58:21 +0000 Subject: [PATCH 10/12] IONOS(ci): Fix branch validation pattern to match exact branch names Co-authored-by: printminion-co <145785698+printminion-co@users.noreply.github.com> --- .github/workflows/build-artifact.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index db6d73f23f909..d9a8e4a1e2ba1 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -156,7 +156,7 @@ jobs: fi # Check if branch matches expected patterns: ionos-dev, ionos-stable, or rc/* - VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable|rc/)' + VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable)$|^rc/' if [[ ! "${{ github.ref_name }}" =~ $VALID_BRANCH_PATTERN ]]; then echo "- ❌ Branch must be 'ionos-dev', 'ionos-stable', or 'rc/*' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev', 'ionos-stable', or 'rc/*')" From f4119226cd5e7444734ac760f9c0896c3a7ffecc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:59:03 +0000 Subject: [PATCH 11/12] IONOS(ci): Make branch validation pattern more explicit with full anchoring Co-authored-by: printminion-co <145785698+printminion-co@users.noreply.github.com> --- .github/workflows/build-artifact.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index d9a8e4a1e2ba1..8849983bd3eb6 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -156,7 +156,7 @@ jobs: fi # Check if branch matches expected patterns: ionos-dev, ionos-stable, or rc/* - VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable)$|^rc/' + VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable)$|^rc/.+$' if [[ ! "${{ github.ref_name }}" =~ $VALID_BRANCH_PATTERN ]]; then echo "- ❌ Branch must be 'ionos-dev', 'ionos-stable', or 'rc/*' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev', 'ionos-stable', or 'rc/*')" From 12212f1600571124686ced554a9da0a5cc4c5c84 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:59:47 +0000 Subject: [PATCH 12/12] IONOS(ci): Use .* instead of .+ in rc/ pattern to match original behavior Co-authored-by: printminion-co <145785698+printminion-co@users.noreply.github.com> --- .github/workflows/build-artifact.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-artifact.yml b/.github/workflows/build-artifact.yml index 8849983bd3eb6..7a336f2e196bb 100644 --- a/.github/workflows/build-artifact.yml +++ b/.github/workflows/build-artifact.yml @@ -156,7 +156,7 @@ jobs: fi # Check if branch matches expected patterns: ionos-dev, ionos-stable, or rc/* - VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable)$|^rc/.+$' + VALID_BRANCH_PATTERN='^(ionos-dev|ionos-stable)$|^rc/.*$' if [[ ! "${{ github.ref_name }}" =~ $VALID_BRANCH_PATTERN ]]; then echo "- ❌ Branch must be 'ionos-dev', 'ionos-stable', or 'rc/*' (current: \`${{ github.ref_name }}\`)" >> $GITHUB_STEP_SUMMARY echo " ❌ Branch is '${{ github.ref_name }}' (must be 'ionos-dev', 'ionos-stable', or 'rc/*')"