Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
df79fd9
[ACE-1975] Downgrade action versions from v6 to v4 that use Node.js 20
osh0501 Jul 8, 2026
1bed9b9
[ACE-1975] Set ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION to force fallb…
osh0501 Jul 8, 2026
d340efe
[ACE-1975] Switch AKS deploy to az aks command invoke via ARM API
osh0501 Jul 9, 2026
7f3a2af
[ACE-1975] Add .azcliignore to exclude large directories. Add verific…
osh0501 Jul 9, 2026
0dd1dda
[ACE-1975] Update --file ./helm. Remove verification step and .azclii…
osh0501 Jul 9, 2026
ee4d420
[ACE-1975] copy just the helm chart to a temp directory and run from …
osh0501 Jul 9, 2026
4caef59
[ACE-1975] Revert to use self-hosted runner and kubelogin. Install mi…
osh0501 Jul 9, 2026
2da9d6b
[ACE-1975] Install kubelogin without sudo using python3 zipfile extra…
osh0501 Jul 10, 2026
7caa7e3
[ACE-1975] Debug connectivity
osh0501 Jul 10, 2026
f451314
[ACE-1975] Use az aks command invoke instead of kubelogin
osh0501 Jul 10, 2026
86f827a
[ACE-1975] Added diagnostic steps to check connectivity issues
osh0501 Jul 10, 2026
03f1212
[ACE-1975] add --file . to az aks command invoke for helm chart access
osh0501 Jul 11, 2026
a14b8f8
[ACE-1975] upload helm chart directory to az aks command invoke pod
osh0501 Jul 11, 2026
5ed637e
[ACE-1975] combine orchestrator and catalog into sequential steps
osh0501 Jul 12, 2026
914598f
[ACE-1975] Fixed --wait/--atomic redundancy
osh0501 Jul 14, 2026
603d81d
[ACE-1975] Test with ubuntu-latest, mask infra names
osh0501 Jul 14, 2026
dc60c0e
[ACE-1975] hide cluster name and rg: use env vars so the values aren'…
osh0501 Jul 14, 2026
3776e18
[ACE-1975] wait for final aks command result and default atomic rollb…
osh0501 Jul 15, 2026
bf749d5
[ACE-1975] handle non-json running status from aks command result
osh0501 Jul 15, 2026
fbc776e
[ACE-1975] update helper to accept both Azure progress text formats
osh0501 Jul 15, 2026
708f7d3
[ACE-1975] lowering CPU limits per pod in both std & prd values so ro…
osh0501 Jul 15, 2026
06b2e1b
[ACE-1975] lowering CPU limits from 500 to 200m
osh0501 Jul 15, 2026
e73fef7
[ACE-1975] mask non-secret identifiers in the wirkflow, update simpli…
osh0501 Jul 15, 2026
f1f668a
[ACE-1975] Mask runtime identifiers
osh0501 Jul 15, 2026
a686758
[ACE-1975] Testing: switch back to self hosted runners, kubelogin, ru…
osh0501 Jul 15, 2026
fd36142
[ACE-1975] Update install kubelogin step
osh0501 Jul 15, 2026
f7070d2
[ACE-1975] Install kubelogin using python3 zipfile extraction
osh0501 Jul 15, 2026
cfadbb5
[ACE-1975] Remove Validate Kubernetes API connectivity step
osh0501 Jul 15, 2026
ec25905
[ACE-1975] Remove network check
osh0501 Jul 16, 2026
1049604
[ACE-1975] Workflow refactoring
osh0501 Jul 16, 2026
64b2aef
[ACE-1975] Workflow refactoring
osh0501 Jul 16, 2026
aec93f3
[ACE-1975] Mask out the runner name and workflow ref
osh0501 Jul 16, 2026
c81c47f
[ACE-1975] Flag --atomic has been deprecated, use --rollback-on-failu…
osh0501 Jul 16, 2026
6d6f2b8
[ACE-1975] Update workflow permissions to allow createWorkflowDispatc…
osh0501 Jul 16, 2026
a9517fc
Merge branch 'main' into deploy-test
cjlapao Jul 20, 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
130 changes: 61 additions & 69 deletions .github/workflows/deploy-aks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ name: Deploy to AKS
# DEPLOYMENT STRATEGY:
# - Workaround reason: GitHub Environments are not available on this GitHub plan,
# so we cannot use environment-based OIDC subjects.
# - Therefore deployments are executed under the trusted main ref subject
# (repo:Parallels/prl-devops-service:ref:refs/heads/main).
# - Therefore deployments are executed under a trusted branch-ref based OIDC subject.
# - When dispatched from main: both Helm chart AND app image (image_tag) are deployed
# - When dispatched from feature branch: only app image is deployed; chart always comes from main
# (This is because chart source is determined by the checkout ref, while image_tag is independent input)
Expand Down Expand Up @@ -44,54 +43,80 @@ on:
required: false
default: false
type: boolean
atomic:
description: Rollback on failure (atomic deployment)
rollback_on_failure:
description: Roll back on failure
required: false
type: boolean
default: false
default: true

jobs:
deploy-orchestrator:
name: Deploy Orchestrator
if: ${{ inputs.deploy_orchestrator }}
deploy-services:
name: Deploy Orchestrator and/or Catalog
if: ${{ inputs.deploy_orchestrator || inputs.deploy_catalog }}
runs-on: [self-hosted, Linux, X64]
timeout-minutes: 30
permissions:
id-token: write
contents: read
env:
AKS_RESOURCE_GROUP: ${{ inputs.environment == 'stg' && secrets.STG_AKS_RESOURCE_GROUP || secrets.PRD_AKS_RESOURCE_GROUP }}
AKS_CLUSTER_NAME: ${{ inputs.environment == 'stg' && secrets.STG_AKS_CLUSTER_NAME || secrets.PRD_AKS_CLUSTER_NAME }}
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Mask runtime identifiers
run: |
oidc_subject="repo:${GITHUB_REPOSITORY}:ref:${GITHUB_REF}"
echo "::add-mask::$oidc_subject"
echo "::add-mask::api://AzureADTokenExchange"
echo "::add-mask::$GITHUB_WORKFLOW_REF"

- name: Azure login (OIDC)
uses: azure/login@v2
with:
client-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_CLIENT_ID || secrets.PRD_AZURE_CLIENT_ID }}
tenant-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_TENANT_ID || secrets.PRD_AZURE_TENANT_ID }}
subscription-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_SUBSCRIPTION_ID || secrets.PRD_AZURE_SUBSCRIPTION_ID }}

- name: Setup Helm
uses: azure/setup-helm@v4

- name: Setup kubectl
uses: azure/setup-kubectl@v4

- name: Install kubelogin
uses: azure/use-kubelogin@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
kubelogin-version: 'v0.2.14'
run: |
set -euo pipefail
KUBELOGIN_VERSION="v0.2.14"
# Skip download if already installed at correct version
if kubelogin --version 2>/dev/null | grep -q "$KUBELOGIN_VERSION"; then
echo "kubelogin $KUBELOGIN_VERSION already installed"
exit 0
fi
curl -sSL "https://github.com/Azure/kubelogin/releases/download/${KUBELOGIN_VERSION}/kubelogin-linux-amd64.zip" -o /tmp/kubelogin.zip
# Use python3 zipfile instead of unzip: runner has no unzip and no passwordless sudo to install it
python3 -m zipfile -e /tmp/kubelogin.zip /tmp/kubelogin
chmod +x /tmp/kubelogin/bin/linux_amd64/kubelogin
mkdir -p "$HOME/.local/bin"
cp /tmp/kubelogin/bin/linux_amd64/kubelogin "$HOME/.local/bin/kubelogin"
rm -rf /tmp/kubelogin /tmp/kubelogin.zip

- name: Set AKS context
uses: azure/aks-set-context@v4
with:
resource-group: ${{ inputs.environment == 'stg' && vars.STG_AKS_RESOURCE_GROUP || vars.PRD_AKS_RESOURCE_GROUP }}
cluster-name: ${{ inputs.environment == 'stg' && vars.STG_AKS_CLUSTER_NAME || vars.PRD_AKS_CLUSTER_NAME }}
run: |
set -euo pipefail
az aks get-credentials \
-g "$AKS_RESOURCE_GROUP" \
-n "$AKS_CLUSTER_NAME" \
--overwrite-existing

- name: Convert kubeconfig for non-interactive login
run: kubelogin convert-kubeconfig -l azurecli

- name: Setup Helm
uses: azure/setup-helm@v4

- name: Helm lint orchestrator
if: ${{ inputs.deploy_orchestrator }}
run: |
set -euo pipefail
helm lint ./helm \
Expand All @@ -101,71 +126,35 @@ jobs:
--set image.tag="${{ inputs.image_tag }}"

- name: Helm deploy orchestrator
if: ${{ inputs.deploy_orchestrator }}
env:
K8S_NAMESPACE: ${{ inputs.namespace }}
DRY_RUN: ${{ inputs.dry_run }}
ATOMIC: ${{ inputs.atomic }}
ROLLBACK_ON_FAILURE: ${{ inputs.rollback_on_failure }}
run: |
set -euo pipefail

HELM_ARGS=(
-f "./helm/values-${{ inputs.environment }}.yaml"
--namespace "$K8S_NAMESPACE"
--set "image.tag=${{ inputs.image_tag }}"
--set config.mode=orchestrator
--set fullnameOverride=prl-devops-orchestrator
--hide-notes
)

if [[ "$DRY_RUN" == "true" ]]; then
helm upgrade --install prl-devops-orchestrator ./helm "${HELM_ARGS[@]}" --dry-run --debug
elif [[ "$ROLLBACK_ON_FAILURE" == "true" ]]; then
DEPLOY_ARGS=(--rollback-on-failure --timeout 5m)
helm upgrade --install prl-devops-orchestrator ./helm "${HELM_ARGS[@]}" "${DEPLOY_ARGS[@]}"
else
DEPLOY_ARGS=(--wait --timeout 5m)
if [[ "$ATOMIC" == "true" ]]; then
DEPLOY_ARGS+=("--atomic")
fi
helm upgrade --install prl-devops-orchestrator ./helm "${HELM_ARGS[@]}" "${DEPLOY_ARGS[@]}"
fi

deploy-catalog:
name: Deploy Catalog
if: ${{ inputs.deploy_catalog }}
runs-on: [self-hosted, Linux, X64]
timeout-minutes: 30
permissions:
id-token: write
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
persist-credentials: false

- name: Azure login (OIDC)
uses: azure/login@v2
with:
client-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_CLIENT_ID || secrets.PRD_AZURE_CLIENT_ID }}
tenant-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_TENANT_ID || secrets.PRD_AZURE_TENANT_ID }}
subscription-id: ${{ inputs.environment == 'stg' && secrets.STG_AZURE_SUBSCRIPTION_ID || secrets.PRD_AZURE_SUBSCRIPTION_ID }}

- name: Install kubelogin
uses: azure/use-kubelogin@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
kubelogin-version: 'v0.2.14'

- name: Set AKS context
uses: azure/aks-set-context@v4
with:
resource-group: ${{ inputs.environment == 'stg' && vars.STG_AKS_RESOURCE_GROUP || vars.PRD_AKS_RESOURCE_GROUP }}
cluster-name: ${{ inputs.environment == 'stg' && vars.STG_AKS_CLUSTER_NAME || vars.PRD_AKS_CLUSTER_NAME }}

- name: Convert kubeconfig for non-interactive login
run: kubelogin convert-kubeconfig -l azurecli

- name: Setup Helm
uses: azure/setup-helm@v4

- name: Helm lint catalog
if: ${{ inputs.deploy_catalog }}
run: |
set -euo pipefail
helm lint ./helm \
Expand All @@ -175,26 +164,29 @@ jobs:
--set image.tag="${{ inputs.image_tag }}"

- name: Helm deploy catalog
if: ${{ inputs.deploy_catalog }}
env:
K8S_NAMESPACE: ${{ inputs.namespace }}
DRY_RUN: ${{ inputs.dry_run }}
ATOMIC: ${{ inputs.atomic }}
ROLLBACK_ON_FAILURE: ${{ inputs.rollback_on_failure }}
run: |
set -euo pipefail

HELM_ARGS=(
-f "./helm/values-${{ inputs.environment }}.yaml"
--namespace "$K8S_NAMESPACE"
--set "image.tag=${{ inputs.image_tag }}"
--set config.mode=catalog
--set fullnameOverride=prl-devops-catalog
--hide-notes
)

if [[ "$DRY_RUN" == "true" ]]; then
helm upgrade --install prl-devops-catalog ./helm "${HELM_ARGS[@]}" --dry-run --debug
elif [[ "$ROLLBACK_ON_FAILURE" == "true" ]]; then
DEPLOY_ARGS=(--rollback-on-failure --timeout 5m)
helm upgrade --install prl-devops-catalog ./helm "${HELM_ARGS[@]}" "${DEPLOY_ARGS[@]}"
else
DEPLOY_ARGS=(--wait --timeout 5m)
if [[ "$ATOMIC" == "true" ]]; then
DEPLOY_ARGS+=("--atomic")
fi
helm upgrade --install prl-devops-catalog ./helm "${HELM_ARGS[@]}" "${DEPLOY_ARGS[@]}"
fi
fi
2 changes: 2 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,8 @@ jobs:
- release
- build-containers
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Dispatch deploy workflow on main
uses: actions/github-script@v7
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release_beta.yml
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,8 @@ jobs:
- beta-release
- build-containers
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Dispatch deploy workflow on main
uses: actions/github-script@v7
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/release_canary.yml
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ jobs:
- canary-release
- build-containers
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Dispatch deploy workflow on main
uses: actions/github-script@v7
Expand Down
6 changes: 3 additions & 3 deletions helm/values-prd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -115,11 +115,11 @@ apiPrefix: /api

resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 200m
memory: 512Mi
limits:
cpu: "2"
memory: 2Gi

autoscaling:
enabled: false
Expand Down
4 changes: 2 additions & 2 deletions helm/values-stg.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ resources:
cpu: 100m
memory: 256Mi
limits:
cpu: "1"
memory: 1Gi
cpu: 200m
memory: 512Mi

autoscaling:
enabled: false
Expand Down
Loading