Skip to content

Commit 9acb0f6

Browse files
committed
Add execution-environment build workflow
1 parent 267bce2 commit 9acb0f6

File tree

1 file changed

+287
-0
lines changed

1 file changed

+287
-0
lines changed

.github/workflows/ee-build.yml

Lines changed: 287 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,287 @@
1+
# Combine workflow for pull-request, push-to-main and release events.
2+
name: EE Build
3+
4+
on:
5+
pull_request_target:
6+
branches:
7+
- main
8+
types: [opened, reopened, synchronize]
9+
push:
10+
branches:
11+
- main
12+
release:
13+
types: [published]
14+
15+
jobs:
16+
prepare:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Checkout repo
20+
uses: actions/checkout@v2
21+
with:
22+
fetch-depth: 0
23+
24+
debug:
25+
if: github.event_name == 'pull_request_target'
26+
needs: prepare
27+
runs-on: ubuntu-latest
28+
environment: test
29+
steps:
30+
- name: Checkout repo
31+
uses: actions/checkout@v2
32+
with:
33+
repository: ${{ github.event.pull_request.head.repo.full_name }}
34+
fetch-depth: 0
35+
ref: ${{ github.event.pull_request.head.ref != '' && github.event.pull_request.head.ref || 'main' }}
36+
37+
- name: Print working directory
38+
run: pwd
39+
40+
- name: List files in the directory
41+
run: ls -lahR
42+
43+
- name: List environment variables
44+
run: printenv | sort
45+
46+
- name: Show git branch and commit
47+
run: |
48+
echo "Current Branch:"
49+
git branch
50+
echo "Current Commit:"
51+
git rev-parse HEAD
52+
53+
- name: Fetch all branches
54+
run: git fetch --all
55+
56+
- name: List all remote branches
57+
run: git branch -r
58+
59+
- name: Show detailed git diff
60+
run: git diff origin/main
61+
62+
build-ee-PR:
63+
if: github.event_name == 'pull_request_target'
64+
needs: debug
65+
outputs:
66+
push_success: ${{ steps.push_to_ghcr.outputs.push_success }}
67+
runs-on: ubuntu-latest
68+
environment: test
69+
steps:
70+
- name: Checkout repo
71+
uses: actions/checkout@v2
72+
with:
73+
fetch-depth: 0
74+
75+
- name: Install python requirements (ansible-builder)
76+
run: pip install ansible-builder
77+
78+
- name: Define environment variables
79+
run: |
80+
echo "EE=`yq -r '.options.tags[0]' 'execution-environment.yml'`" >> $GITHUB_ENV
81+
echo "EE_file=execution-environment.yml" >> $GITHUB_ENV
82+
SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7)
83+
echo "IMAGE_TAG=pr-${{ github.event.number }}-$SHORT_SHA" >> $GITHUB_ENV
84+
echo "IMAGE_REGISTRY=ghcr.io" >> $GITHUB_ENV
85+
echo $GITHUB_ENV
86+
87+
- name: Login to ghcr
88+
uses: redhat-actions/podman-login@v1
89+
with:
90+
registry: ${{ env.IMAGE_REGISTRY }}
91+
username: ${{ github.actor }}
92+
password: ${{ secrets.GITHUB_TOKEN }}
93+
94+
- name: Build image and create artifact
95+
run: |
96+
ansible-builder build -v 3 \
97+
--build-arg AH_TOKEN=${{ secrets.AH_TOKEN }} \
98+
--tag=${{ env.EE }}:${{ env.IMAGE_TAG }} \
99+
--tag=${{ env.EE }}:${{ github.sha }}
100+
101+
# Create artifact file
102+
COMMANDS_FILE="commands-${{ env.EE }}.txt"
103+
echo "" >> $COMMANDS_FILE
104+
echo "EE: ${{ env.EE }}" >> $COMMANDS_FILE
105+
echo "" >> $COMMANDS_FILE
106+
echo "\`\`\`" > $COMMANDS_FILE
107+
echo "podman pull ${{ env.IMAGE_REGISTRY }}/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}" >> $COMMANDS_FILE
108+
echo "\`\`\`" >> $COMMANDS_FILE
109+
echo "<details>" >> $COMMANDS_FILE
110+
echo "<summary><b>More info...</b></summary>" >> $COMMANDS_FILE
111+
echo "" >> $COMMANDS_FILE
112+
echo "#### Installed collections" >> $COMMANDS_FILE
113+
echo "" >> $COMMANDS_FILE
114+
echo "\`\`\`" >> $COMMANDS_FILE
115+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible-galaxy collection list >> $COMMANDS_FILE
116+
echo "\`\`\`" >> $COMMANDS_FILE
117+
echo "" >> $COMMANDS_FILE
118+
echo "#### EE Testing" >> $COMMANDS_FILE
119+
echo "" >> $COMMANDS_FILE
120+
echo "\`\`\`" >> $COMMANDS_FILE
121+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible-navigator --version >> $COMMANDS_FILE
122+
echo "\`\`\`" >> $COMMANDS_FILE
123+
echo "" >> $COMMANDS_FILE
124+
echo "#### Ansible version" >> $COMMANDS_FILE
125+
echo "" >> $COMMANDS_FILE
126+
echo "\`\`\`" >> $COMMANDS_FILE
127+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible --version >> $COMMANDS_FILE
128+
echo "\`\`\`" >> $COMMANDS_FILE
129+
echo "</details>" >> $COMMANDS_FILE
130+
131+
- name: Upload build artifact
132+
uses: actions/upload-artifact@v4
133+
with:
134+
name: commands-${{ env.EE }}
135+
path: ./commands-${{ env.EE }}.txt
136+
137+
- name: Push To GHCR
138+
id: push_to_ghcr
139+
uses: redhat-actions/push-to-registry@v2
140+
with:
141+
image: ${{ env.EE }}
142+
tags: ${{ env.IMAGE_TAG }}
143+
registry: ${{ env.IMAGE_REGISTRY }}/${{ github.repository_owner }}
144+
145+
- name: Set push success flag
146+
if: success()
147+
run: echo "push_success=true" >> $GITHUB_ENV
148+
149+
- name: Print summary
150+
run: |
151+
echo "## Usage" >> $GITHUB_STEP_SUMMARY
152+
echo "Image pushed to repository: ${{ env.IMAGE_REGISTRY }}/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}" >> $GITHUB_STEP_SUMMARY
153+
echo "> \`podman pull ${{ env.IMAGE_REGISTRY }}/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY
154+
155+
build-ee-push-and-release:
156+
if: github.event_name == 'push' || github.event_name == 'release'
157+
needs: prepare
158+
runs-on: ubuntu-latest
159+
environment: ${{ github.event_name }}
160+
steps:
161+
- name: Checkout repo
162+
uses: actions/checkout@v2
163+
with:
164+
fetch-depth: 0
165+
ref: ${{ github.head_ref }}
166+
167+
- name: Fetch the base and head refs
168+
run: |
169+
git fetch origin ${{ github.base_ref }}
170+
git fetch origin ${{ github.head_ref }}
171+
172+
- name: Install python requirements (ansible-builder)
173+
run: pip install ansible-builder
174+
175+
- name: Define environment variables
176+
run: |
177+
echo "EE=`yq -r '.options.tags[0]' 'execution-environment.yml'`" >> $GITHUB_ENV
178+
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
179+
echo "EE_file=execution-environment.yml" >> $GITHUB_ENV
180+
181+
- name: Login to ghcr
182+
uses: redhat-actions/podman-login@v1
183+
with:
184+
registry: ghcr.io
185+
username: ${{ github.actor }}
186+
password: ${{ secrets.GITHUB_TOKEN }}
187+
188+
- name: (devel) Build image and create artifact
189+
run: |
190+
echo "Would build: ${{ env.EE }}"
191+
192+
- name: Build image and create artifact
193+
run: |
194+
ansible-builder build -v 3 \
195+
--build-arg AH_TOKEN=${{ secrets.AH_TOKEN }} \
196+
--context=../${{ env.EE }} \
197+
--tag=${{ env.EE }}:${{ env.IMAGE_TAG }} \
198+
--tag=${{ env.EE }}:${{ github.sha }}
199+
200+
# Create artifact file
201+
COMMANDS_FILE="commands-${{ env.EE }}.txt"
202+
echo "" >> $COMMANDS_FILE
203+
echo "EE: ${{ env.EE }}" >> $COMMANDS_FILE
204+
echo "" >> $COMMANDS_FILE
205+
echo "\`\`\`" > $COMMANDS_FILE
206+
echo "podman pull ghcr.io/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}" >> $COMMANDS_FILE
207+
echo "\`\`\`" >> $COMMANDS_FILE
208+
echo "<details>" >> $COMMANDS_FILE
209+
echo "<summary><b>More info...</b></summary>" >> $COMMANDS_FILE
210+
echo "" >> $COMMANDS_FILE
211+
echo "#### Installed collections" >> $COMMANDS_FILE
212+
echo "" >> $COMMANDS_FILE
213+
echo "\`\`\`" >> $COMMANDS_FILE
214+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible-galaxy collection list >> $COMMANDS_FILE
215+
echo "\`\`\`" >> $COMMANDS_FILE
216+
echo "" >> $COMMANDS_FILE
217+
echo "#### EE Testing" >> $COMMANDS_FILE
218+
echo "" >> $COMMANDS_FILE
219+
echo "\`\`\`" >> $COMMANDS_FILE
220+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible-navigator --version >> $COMMANDS_FILE
221+
echo "\`\`\`" >> $COMMANDS_FILE
222+
echo "" >> $COMMANDS_FILE
223+
echo "#### Ansible version" >> $COMMANDS_FILE
224+
echo "" >> $COMMANDS_FILE
225+
echo "\`\`\`" >> $COMMANDS_FILE
226+
podman run -it ${{ env.EE }}:${{ env.IMAGE_TAG }} ansible --version >> $COMMANDS_FILE
227+
echo "\`\`\`" >> $COMMANDS_FILE
228+
echo "</details>" >> $COMMANDS_FILE
229+
230+
- name: Upload build artifact
231+
uses: actions/upload-artifact@v4
232+
with:
233+
name: commands-${{ env.EE }}
234+
path: ./commands-${{ env.EE }}.txt
235+
236+
- name: Push To GHCR
237+
id: push_to_ghcr
238+
uses: redhat-actions/push-to-registry@v2
239+
with:
240+
image: ${{ env.EE }}
241+
tags: ${{ env.IMAGE_TAG }} ${{ github.sha }}
242+
registry: ghcr.io/${{ github.repository_owner }}
243+
244+
- name: Print summary
245+
run: |
246+
echo "## Usage" >> $GITHUB_STEP_SUMMARY
247+
echo "Image pushed to repository: ghcr.io/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}" >> $GITHUB_STEP_SUMMARY
248+
echo "> \`podman pull ghcr.io/${{ github.repository_owner }}/${{ env.EE }}:${{ env.IMAGE_TAG }}\`" >> $GITHUB_STEP_SUMMARY
249+
250+
post-comment:
251+
if: github.event_name == 'pull_request_target'
252+
needs: build-ee-PR
253+
runs-on: ubuntu-latest
254+
steps:
255+
- name: Checkout
256+
uses: actions/checkout@v2
257+
258+
- name: Download Artifacts
259+
uses: actions/download-artifact@v4
260+
261+
- name: Post Comment
262+
uses: actions/github-script@v7
263+
with:
264+
script: |
265+
const fs = require('fs');
266+
const path = require('path');
267+
let commentBody = '### **EE Images Built** \n\n';
268+
269+
const artifactsDirectory = './'; // Base directory where artifacts are downloaded
270+
fs.readdirSync(artifactsDirectory, { withFileTypes: true }).forEach(dirent => {
271+
if (dirent.isDirectory() && dirent.name.startsWith('commands-')) {
272+
const artifactDirPath = path.join(artifactsDirectory, dirent.name);
273+
fs.readdirSync(artifactDirPath).forEach(file => {
274+
const filePath = path.join(artifactDirPath, file);
275+
const content = fs.readFileSync(filePath, 'utf8');
276+
commentBody += content + '\n';
277+
});
278+
}
279+
});
280+
281+
const prNumber = context.issue.number;
282+
const repo = context.repo;
283+
github.rest.issues.createComment({
284+
...repo,
285+
issue_number: prNumber,
286+
body: commentBody.trim()
287+
});

0 commit comments

Comments
 (0)