@@ -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