Skip to content

Commit 4b03ffa

Browse files
committed
Refactor workflows to use composite actions
Replace duplicated workflow code with composite actions: - Use setup-cluster-name for cluster naming (hash/date strategies) - Use preflight-checks for environment validation - Use setup-infrastructure for infrastructure setup - Use collect-artifacts for artifact collection - Use notify-slack for Slack notifications (nightly workflows) This eliminates ~500 lines of duplicated code across 4 workflows, making them more maintainable and consistent.
1 parent e8d1aec commit 4b03ffa

4 files changed

Lines changed: 103 additions & 648 deletions

File tree

.github/workflows/e2e-deployment.yml

Lines changed: 17 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -118,74 +118,19 @@ jobs:
118118
uses: actions/checkout@v4
119119

120120
- name: Generate unique cluster name
121-
id: cluster_name
122-
run: |
123-
# Generate short hash from run_id to stay within 15-char bridge name limit
124-
# Cluster name: eci-XXXXXXXX (12 chars)
125-
# Networks: eci-XXXXXXXX-b/c (14 chars) - fits in 15 char limit
126-
SHORT_ID=$(echo "${{ github.run_id }}" | sha256sum | cut -c1-8)
127-
CLUSTER_NAME="eci-${SHORT_ID}"
128-
echo "ENCLAVE_CLUSTER_NAME=${CLUSTER_NAME}" >> $GITHUB_ENV
129-
echo "Generated cluster name: ${CLUSTER_NAME}"
121+
uses: ./.github/actions/setup-cluster-name
122+
with:
123+
naming-strategy: hash
124+
prefix: eci
125+
run-id: ${{ github.run_id }}
130126

131127
- name: Pre-flight checks
132-
id: preflight
133-
shell: bash {0}
134-
run: |
135-
set +e # Don't exit on first error, collect all failures
136-
FAILED=0
137-
138-
echo "## E2E Deployment Pre-flight Checks" | tee -a $GITHUB_STEP_SUMMARY
139-
echo "" | tee -a $GITHUB_STEP_SUMMARY
140-
141-
# Check required environment variables
142-
echo "### Environment Variables" | tee -a $GITHUB_STEP_SUMMARY
143-
if [ -z "$DEV_SCRIPTS_PATH" ]; then
144-
echo "❌ DEV_SCRIPTS_PATH not set" | tee -a $GITHUB_STEP_SUMMARY
145-
FAILED=1
146-
else
147-
echo "✅ DEV_SCRIPTS_PATH: $DEV_SCRIPTS_PATH" | tee -a $GITHUB_STEP_SUMMARY
148-
fi
149-
150-
if [ -z "$WORKING_DIR" ]; then
151-
echo "❌ WORKING_DIR not set" | tee -a $GITHUB_STEP_SUMMARY
152-
FAILED=1
153-
else
154-
echo "✅ WORKING_DIR: $WORKING_DIR" | tee -a $GITHUB_STEP_SUMMARY
155-
fi
156-
157-
if [ -z "$PULL_SECRET" ]; then
158-
echo "❌ PULL_SECRET not set" | tee -a $GITHUB_STEP_SUMMARY
159-
FAILED=1
160-
else
161-
echo "✅ PULL_SECRET: configured" | tee -a $GITHUB_STEP_SUMMARY
162-
fi
163-
164-
echo "✅ Deployment mode: $ENCLAVE_DEPLOYMENT_MODE" | tee -a $GITHUB_STEP_SUMMARY
165-
166-
# Check system resources
167-
echo "" | tee -a $GITHUB_STEP_SUMMARY
168-
echo "### System Resources" | tee -a $GITHUB_STEP_SUMMARY
169-
TOTAL_RAM=$(free -g | awk '/^Mem:/{print $2}')
170-
echo "✅ Total RAM: ${TOTAL_RAM}GB" | tee -a $GITHUB_STEP_SUMMARY
171-
172-
if [ -n "$WORKING_DIR" ]; then
173-
AVAILABLE_DISK=$(df -h $WORKING_DIR 2>/dev/null | awk 'NR==2{print $4}')
174-
if [ -n "$AVAILABLE_DISK" ]; then
175-
echo "✅ Available disk space: $AVAILABLE_DISK" | tee -a $GITHUB_STEP_SUMMARY
176-
fi
177-
fi
178-
179-
if [ $FAILED -eq 0 ]; then
180-
echo "" | tee -a $GITHUB_STEP_SUMMARY
181-
echo "✅ All pre-flight checks passed" | tee -a $GITHUB_STEP_SUMMARY
182-
else
183-
echo "" | tee -a $GITHUB_STEP_SUMMARY
184-
echo "❌ Pre-flight checks failed" | tee -a $GITHUB_STEP_SUMMARY
185-
echo "" | tee -a $GITHUB_STEP_SUMMARY
186-
echo "**Action Required**: Configure repository variables and secrets in Settings → Secrets and variables → Actions" | tee -a $GITHUB_STEP_SUMMARY
187-
exit 1
188-
fi
128+
uses: ./.github/actions/preflight-checks
129+
with:
130+
title: E2E Deployment Pre-flight Checks
131+
check-pull-secret: 'true'
132+
check-system-resources: 'true'
133+
check-libvirt: 'true'
189134

190135
- name: Clean existing infrastructure
191136
id: clean
@@ -198,38 +143,8 @@ jobs:
198143
199144
echo "✅ Cleanup complete" >> $GITHUB_STEP_SUMMARY
200145
201-
- name: Create infrastructure
202-
id: create_infra
203-
run: |
204-
echo "## Creating Test Infrastructure" >> $GITHUB_STEP_SUMMARY
205-
echo "" >> $GITHUB_STEP_SUMMARY
206-
echo "Creating VMs, networks, and BMC emulation..." >> $GITHUB_STEP_SUMMARY
207-
208-
make environment
209-
210-
echo "✅ Infrastructure created" >> $GITHUB_STEP_SUMMARY
211-
212-
- name: Provision Landing Zone
213-
id: provision_lz
214-
run: |
215-
echo "## Provisioning Landing Zone" >> $GITHUB_STEP_SUMMARY
216-
echo "" >> $GITHUB_STEP_SUMMARY
217-
echo "Installing CentOS Stream 10 on Landing Zone VM..." >> $GITHUB_STEP_SUMMARY
218-
219-
make provision-landing-zone
220-
221-
echo "✅ Landing Zone provisioned" >> $GITHUB_STEP_SUMMARY
222-
223-
- name: Install Enclave Lab
224-
id: install_enclave
225-
run: |
226-
echo "## Installing Enclave Lab" >> $GITHUB_STEP_SUMMARY
227-
echo "" >> $GITHUB_STEP_SUMMARY
228-
echo "Mode: $ENCLAVE_DEPLOYMENT_MODE" >> $GITHUB_STEP_SUMMARY
229-
230-
make install-enclave
231-
232-
echo "✅ Enclave Lab installed" >> $GITHUB_STEP_SUMMARY
146+
- name: Setup infrastructure
147+
uses: ./.github/actions/setup-infrastructure
233148

234149
- name: Phase 1 - Prepare binaries and content
235150
id: deploy_prepare
@@ -400,18 +315,10 @@ jobs:
400315
401316
- name: Collect artifacts
402317
if: always()
403-
run: |
404-
echo "## Collecting Artifacts" >> $GITHUB_STEP_SUMMARY
405-
echo "" >> $GITHUB_STEP_SUMMARY
406-
407-
# Use centralized artifact collection script
408-
./scripts/collect_ci_artifacts.sh deployment artifacts 2>&1 | tee artifact-collection.log
409-
410-
# Append summary to GitHub Step Summary
411-
if [ -f artifacts/collection-summary.txt ]; then
412-
echo "" >> $GITHUB_STEP_SUMMARY
413-
cat artifacts/collection-summary.txt >> $GITHUB_STEP_SUMMARY
414-
fi
318+
uses: ./.github/actions/collect-artifacts
319+
with:
320+
artifact-type: deployment
321+
output-directory: artifacts
415322

416323
- name: Collect full diagnostics on failure
417324
if: failure()

.github/workflows/infra-verify.yml

Lines changed: 20 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,16 @@ jobs:
3838
OPENSHIFT_CI: "true"
3939

4040
steps:
41-
- name: Generate unique cluster name
42-
id: cluster_name
43-
run: |
44-
# Generate short hash from run_id to stay within 15-char bridge name limit
45-
# Cluster name: eci-XXXXXXXX (12 chars)
46-
# Networks: eci-XXXXXXXX-b/c (14 chars) - fits in 15 char limit
47-
SHORT_ID=$(echo "${{ github.run_id }}" | sha256sum | cut -c1-8)
48-
CLUSTER_NAME="eci-${SHORT_ID}"
49-
echo "ENCLAVE_CLUSTER_NAME=${CLUSTER_NAME}" >> $GITHUB_ENV
50-
echo "Generated cluster name: ${CLUSTER_NAME}"
51-
5241
- name: Checkout code
5342
uses: actions/checkout@v4
5443

44+
- name: Generate unique cluster name
45+
uses: ./.github/actions/setup-cluster-name
46+
with:
47+
naming-strategy: hash
48+
prefix: eci
49+
run-id: ${{ github.run_id }}
50+
5551
- name: Workflow information
5652
env:
5753
PR_TITLE: ${{ github.event.pull_request.title }}
@@ -67,84 +63,16 @@ jobs:
6763
echo "" >> $GITHUB_STEP_SUMMARY
6864
6965
- name: Pre-flight checks
70-
id: preflight
71-
shell: bash {0}
72-
run: |
73-
set +e # Don't exit on first error, collect all failures
74-
FAILED=0
75-
76-
echo "## Infrastructure Verification Pre-flight Checks" | tee -a $GITHUB_STEP_SUMMARY
77-
echo "" | tee -a $GITHUB_STEP_SUMMARY
78-
79-
# Check required environment variables
80-
echo "### Environment Variables" | tee -a $GITHUB_STEP_SUMMARY
81-
if [ -z "$DEV_SCRIPTS_PATH" ]; then
82-
echo "❌ DEV_SCRIPTS_PATH not set" | tee -a $GITHUB_STEP_SUMMARY
83-
FAILED=1
84-
else
85-
echo "✅ DEV_SCRIPTS_PATH: $DEV_SCRIPTS_PATH" | tee -a $GITHUB_STEP_SUMMARY
86-
fi
87-
88-
if [ -z "$WORKING_DIR" ]; then
89-
echo "❌ WORKING_DIR not set" | tee -a $GITHUB_STEP_SUMMARY
90-
FAILED=1
91-
else
92-
echo "✅ WORKING_DIR: $WORKING_DIR" | tee -a $GITHUB_STEP_SUMMARY
93-
fi
94-
95-
# Check system resources
96-
echo "" | tee -a $GITHUB_STEP_SUMMARY
97-
echo "### System Resources" | tee -a $GITHUB_STEP_SUMMARY
98-
TOTAL_RAM=$(free -g | awk '/^Mem:/{print $2}')
99-
echo "✅ Total RAM: ${TOTAL_RAM}GB" | tee -a $GITHUB_STEP_SUMMARY
100-
101-
if [ -n "$WORKING_DIR" ]; then
102-
AVAILABLE_DISK=$(df -h $WORKING_DIR 2>/dev/null | awk 'NR==2{print $4}')
103-
if [ -n "$AVAILABLE_DISK" ]; then
104-
echo "✅ Available disk space: $AVAILABLE_DISK" | tee -a $GITHUB_STEP_SUMMARY
105-
fi
106-
fi
107-
108-
# Check libvirt access
109-
echo "" | tee -a $GITHUB_STEP_SUMMARY
110-
echo "### Libvirt Access" | tee -a $GITHUB_STEP_SUMMARY
111-
if sudo virsh list --all > /dev/null 2>&1; then
112-
echo "✅ Libvirt access verified" | tee -a $GITHUB_STEP_SUMMARY
113-
else
114-
echo "❌ Cannot access libvirt" | tee -a $GITHUB_STEP_SUMMARY
115-
FAILED=1
116-
fi
117-
118-
if [ $FAILED -eq 0 ]; then
119-
echo "" | tee -a $GITHUB_STEP_SUMMARY
120-
echo "✅ All pre-flight checks passed" | tee -a $GITHUB_STEP_SUMMARY
121-
else
122-
echo "" | tee -a $GITHUB_STEP_SUMMARY
123-
echo "❌ Pre-flight checks failed" | tee -a $GITHUB_STEP_SUMMARY
124-
echo "" | tee -a $GITHUB_STEP_SUMMARY
125-
echo "**Action Required**: Configure repository variables in Settings → Secrets and variables → Actions → Variables:" | tee -a $GITHUB_STEP_SUMMARY
126-
echo "- DEV_SCRIPTS_PATH" | tee -a $GITHUB_STEP_SUMMARY
127-
echo "- WORKING_DIR" | tee -a $GITHUB_STEP_SUMMARY
128-
exit 1
129-
fi
130-
131-
- name: Create test infrastructure
132-
id: create_infra
133-
run: |
134-
echo "## Creating Test Infrastructure" >> $GITHUB_STEP_SUMMARY
135-
echo "" >> $GITHUB_STEP_SUMMARY
136-
echo "Creating VMs, networks, and BMC emulation..." >> $GITHUB_STEP_SUMMARY
137-
138-
make environment
139-
140-
- name: Provision Landing Zone
141-
id: provision_lz
142-
run: |
143-
echo "## Provisioning Landing Zone" >> $GITHUB_STEP_SUMMARY
144-
echo "" >> $GITHUB_STEP_SUMMARY
145-
echo "Installing CentOS Stream 10 on Landing Zone VM..." >> $GITHUB_STEP_SUMMARY
66+
uses: ./.github/actions/preflight-checks
67+
with:
68+
title: Infrastructure Verification Pre-flight Checks
69+
check-system-resources: 'true'
70+
check-libvirt: 'true'
14671

147-
make provision-landing-zone
72+
- name: Setup infrastructure
73+
uses: ./.github/actions/setup-infrastructure
74+
with:
75+
skip-install-enclave: 'true'
14876

14977
- name: Install Enclave Lab (Connected Mode)
15078
id: install_enclave
@@ -157,64 +85,10 @@ jobs:
15785
15886
- name: Collect artifacts
15987
if: always()
160-
run: |
161-
echo "## Collecting Artifacts" >> $GITHUB_STEP_SUMMARY
162-
echo "" >> $GITHUB_STEP_SUMMARY
163-
164-
mkdir -p ci-artifacts
165-
166-
# Copy environment.json if it exists
167-
if [ -f "$WORKING_DIR/environment.json" ]; then
168-
cp "$WORKING_DIR/environment.json" ci-artifacts/
169-
echo "✅ Collected environment.json" >> $GITHUB_STEP_SUMMARY
170-
fi
171-
172-
# Collect VM status
173-
sudo virsh list --all > ci-artifacts/vm-status.txt 2>&1 || true
174-
echo "✅ Collected VM status" >> $GITHUB_STEP_SUMMARY
175-
176-
# Collect network status
177-
sudo virsh net-list --all > ci-artifacts/network-status.txt 2>&1 || true
178-
echo "✅ Collected network status" >> $GITHUB_STEP_SUMMARY
179-
180-
# Collect installation logs from Landing Zone if accessible
181-
if [ -f "$WORKING_DIR/environment.json" ]; then
182-
LZ_IP=$(jq -r '.vms.landing_zone.networks.bmc.ip // empty' "$WORKING_DIR/environment.json" 2>/dev/null || true)
183-
if [ -n "$LZ_IP" ]; then
184-
SSH_OPTS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ConnectTimeout=10"
185-
186-
# Collect Enclave installation log (not deployment.log - that's for OpenShift deployment)
187-
if ssh $SSH_OPTS cloud-user@$LZ_IP "test -f /home/cloud-user/enclave/installation.log" 2>/dev/null; then
188-
scp $SSH_OPTS cloud-user@$LZ_IP:/home/cloud-user/enclave/installation.log ci-artifacts/ 2>/dev/null || true
189-
if [ -f ci-artifacts/installation.log ]; then
190-
echo "✅ Collected Enclave installation log" >> $GITHUB_STEP_SUMMARY
191-
fi
192-
fi
193-
194-
# NOTE: config/global.yaml is NOT collected directly due to credential exposure risk
195-
# A sanitized version is included in the must-gather tarball below
196-
197-
# Run gather.sh on LZ and copy logs archive to ci-artifacts/must-gather
198-
# Note: gather.sh may not exist in infra-only runs
199-
if ssh $SSH_OPTS cloud-user@$LZ_IP "test -f /home/cloud-user/enclave/must-gather/gather.sh" 2>/dev/null; then
200-
mkdir -p ci-artifacts/must-gather
201-
GATHER_OUT=$(ssh $SSH_OPTS cloud-user@$LZ_IP "cd /home/cloud-user/enclave/must-gather && GITHUB_RUN_ID='${{ github.run_id }}' ./gather.sh ../config/global.yaml 2>&1" || echo "gather.sh failed or not found")
202-
if [ -n "$GATHER_OUT" ]; then
203-
echo "$GATHER_OUT" > ci-artifacts/must-gather/gather-output.txt
204-
fi
205-
206-
# Copy logs archive to ci-artifacts/must-gather
207-
scp $SSH_OPTS "cloud-user@${LZ_IP}:/home/cloud-user/enclave/must-gather/lz-logs-*.tar.gz" ci-artifacts/must-gather/ 2>/dev/null || true
208-
if ls ci-artifacts/must-gather/lz-logs-*.tar.gz 1>/dev/null 2>&1; then
209-
echo "✅ Collected LZ logs archive" >> $GITHUB_STEP_SUMMARY
210-
else
211-
echo "ℹ️ No must-gather archive (normal for infra-only runs)" >> $GITHUB_STEP_SUMMARY
212-
fi
213-
else
214-
echo "ℹ️ Skipping must-gather (normal for infra-only runs)" >> $GITHUB_STEP_SUMMARY
215-
fi
216-
fi
217-
fi
88+
uses: ./.github/actions/collect-artifacts
89+
with:
90+
artifact-type: infra
91+
output-directory: ci-artifacts
21892

21993
- name: Upload artifacts
22094
if: always()

0 commit comments

Comments
 (0)