-
Notifications
You must be signed in to change notification settings - Fork 356
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #5071 from VladimirSlavik/master-live-action
infra: Build also live and updates images
- Loading branch information
Showing
2 changed files
with
371 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,12 +3,22 @@ | |
# THIS FILE IS GENERATED FROM A TEMPLATE | ||
# DO NOT EDIT THIS FILE MANUALLY! | ||
# ====================================== | ||
# The template is located in: build-boot-iso.yml.j2 | ||
# The template is located in: build-image.yml.j2 | ||
|
||
# Build a boot.iso from a PR triggered by a "/boot-iso" comment or manually. | ||
# You can use the --webui option to build a webui boot.iso instead | ||
# Build a bootable image from a PR triggered by a "/build-image" comment or manually. | ||
# | ||
# Choose type of the image with these options: | ||
# --boot.iso | ||
# --live | ||
# --updates.img | ||
# | ||
# If none of these is present, --boot-iso is assumed. | ||
# If more are present at once, all variants are built. | ||
# | ||
# To use webui on boot.iso, add also: | ||
# --webui | ||
|
||
name: Build boot.iso | ||
name: Build images | ||
on: | ||
issue_comment: | ||
types: [created] | ||
|
@@ -22,7 +32,7 @@ permissions: | |
|
||
jobs: | ||
pr-info: | ||
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.comment.body, '/boot-iso') | ||
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.comment.body, '/build-image') | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Query comment author repository permissions | ||
|
@@ -59,9 +69,13 @@ jobs: | |
env: | ||
BODY: ${{ github.event.comment.body }} | ||
run: | | ||
# extract first line and cut out the "/boot-iso" first word | ||
# extract first line and cut out the "/build-image" first word | ||
ARGS=$(echo "$BODY" | sed -n '1 s/^[^ ]* *//p' | sed 's/[[:space:]]*$//') | ||
echo "arguments are: $ARGS" | ||
if ! [[ "$ARGS" == *"--boot.iso"* || "$ARGS" == *"--live"* || "$ARGS" == *"--updates.img"* ]] ; then | ||
ARGS="$ARGS --boot.iso" | ||
echo "adding implicit --boot.iso, arguments now are: $ARGS" | ||
fi | ||
echo "args=${ARGS}" >> $GITHUB_OUTPUT | ||
- name: Construct image description | ||
|
@@ -112,10 +126,10 @@ jobs: | |
args: ${{ steps.parse_args.outputs.args }} | ||
image_description: ${{ steps.image_description.outputs.image_description }} | ||
|
||
run: | ||
boot-iso: | ||
needs: pr-info | ||
# only do this for Fedora for now; once we have RHEL 8/9 boot.iso builds working, also support these | ||
if: needs.pr-info.outputs.allowed_user == 'true' | ||
if: needs.pr-info.outputs.allowed_user == 'true' && contains(needs.pr-info.outputs.args, '--boot.iso') | ||
runs-on: [self-hosted, kstest] | ||
timeout-minutes: 300 | ||
env: | ||
|
@@ -158,7 +172,7 @@ jobs: | |
mkdir -p ./anaconda_rpms/ | ||
cp -av ./result/build/01-rpm-build/*.rpm ./anaconda_rpms/ | ||
- name: Build the boot.iso | ||
- name: Build the ISO image | ||
run: | | ||
mkdir -p images | ||
if [[ "${{ needs.pr-info.outputs.args }}" == *"--webui"* ]] ; then | ||
|
@@ -184,22 +198,89 @@ jobs: | |
- name: Upload image | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: image ${{ needs.pr-info.outputs.image_description }} | ||
name: boot.iso image for ${{ needs.pr-info.outputs.image_description }} | ||
path: | | ||
images/*.iso | ||
- name: Add comment with link to PR | ||
if: github.event_name != 'workflow_dispatch' | ||
- name: Set result status | ||
if: always() | ||
uses: octokit/[email protected] | ||
with: | ||
route: 'POST /repos/${{ github.repository }}/statuses/${{ needs.pr-info.outputs.sha }}' | ||
context: '${{ env.STATUS_NAME }} ${{ needs.pr-info.outputs.launch_args }}' | ||
state: ${{ job.status }} | ||
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | ||
env: | ||
GH_TOKEN: ${{ github.token }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
live-iso: | ||
needs: pr-info | ||
if: needs.pr-info.outputs.allowed_user == 'true' && contains(needs.pr-info.outputs.args, '--live') | ||
runs-on: [self-hosted, kstest] | ||
timeout-minutes: 300 | ||
env: | ||
STATUS_NAME: live-iso | ||
CONTAINER_TAG: 'lorax' | ||
ISO_BUILD_CONTAINER_NAME: 'quay.io/rhinstaller/anaconda-live-iso-creator' | ||
steps: | ||
# we post statuses manually as this does not run from a pull_request event | ||
# https://developer.github.com/v3/repos/statuses/#create-a-status | ||
- name: Create in-progress status | ||
uses: octokit/[email protected] | ||
with: | ||
route: 'POST /repos/${{ github.repository }}/statuses/${{ needs.pr-info.outputs.sha }}' | ||
context: '${{ env.STATUS_NAME }} ${{ needs.pr-info.outputs.launch_args }}' | ||
state: pending | ||
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Clone repository | ||
uses: actions/checkout@v3 | ||
with: | ||
ref: ${{ needs.pr-info.outputs.sha }} | ||
fetch-depth: 0 | ||
|
||
- name: Build anaconda-rpm container (for RPM build) | ||
run: | | ||
sha="${{ needs.pr-info.outputs.sha }}" | ||
url="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" | ||
echo -n "\`boot.iso\` built successfully based on commit $sha. " >> comment.txt | ||
echo -e "Download it from the bottom of the [job status page]($url).\n" >> comment.txt | ||
echo "Comment to be posted:" | ||
cat comment.txt | ||
gh pr comment ${{ github.event.issue.number }} -F comment.txt | ||
# set static tag to avoid complications when looking what tag is used | ||
make -f ./Makefile.am anaconda-rpm-build CI_TAG=$CONTAINER_TAG | ||
- name: Build Anaconda RPM files | ||
run: | | ||
# output of the build will be stored in ./result/build/01-rpm-build/*.rpm | ||
make -f ./Makefile.am container-rpms-scratch CI_TAG=$CONTAINER_TAG | ||
- name: Build anaconda-live-iso-creator container image | ||
run: | | ||
# set static tag to avoid complications when looking what tag is used | ||
make -f ./Makefile.am anaconda-live-iso-creator-build CI_TAG=$CONTAINER_TAG | ||
- name: Build the ISO image | ||
run: | | ||
mkdir -p images | ||
make -f Makefile.am container-live-iso-build CI_TAG=$CONTAINER_TAG | ||
mv result/iso/Fedora-Workstation.iso "images/${{ needs.pr-info.outputs.image_description }}-Fedora-Workstation.iso" | ||
- name: Make artefacts created by sudo cleanable | ||
if: always() | ||
run: | ||
sudo chown -R github:github . | ||
|
||
- name: Collect logs | ||
if: always() | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: 'logs' | ||
path: | | ||
images/*.log | ||
- name: Upload image artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: live image for ${{ needs.pr-info.outputs.image_description }} | ||
path: | | ||
images/*.iso | ||
- name: Set result status | ||
if: always() | ||
|
@@ -211,3 +292,88 @@ jobs: | |
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
updates-img: | ||
needs: pr-info | ||
if: needs.pr-info.outputs.allowed_user == 'true' && contains(needs.pr-info.outputs.args, '--updates.img') | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 10 | ||
env: | ||
STATUS_NAME: updates-img | ||
steps: | ||
- name: Clone repository | ||
uses: actions/checkout@v3 | ||
with: | ||
ref: ${{ needs.pr-info.outputs.sha }} | ||
fetch-depth: 0 | ||
|
||
- name: Install required packages | ||
run: | | ||
sudo apt install -y dracut | ||
- name: Create updates image | ||
run: | | ||
./scripts/makeupdates | ||
new_name="${{ needs.pr-info.outputs.image_description }}-updates.img" | ||
mv updates.img "$new_name" | ||
lsinitrd "$new_name" | ||
- name: Upload image | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: updates.img for ${{ needs.pr-info.outputs.image_description }} | ||
path: | | ||
*.img | ||
- name: Set result status | ||
if: always() | ||
uses: octokit/[email protected] | ||
with: | ||
route: 'POST /repos/${{ github.repository }}/statuses/${{ needs.pr-info.outputs.sha }}' | ||
context: '${{ env.STATUS_NAME }} ${{ needs.pr-info.outputs.launch_args }}' | ||
state: ${{ job.status }} | ||
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
finalize: | ||
needs: [pr-info, boot-iso, live-iso, updates-img] | ||
runs-on: ubuntu-latest | ||
# needs always() to run even if builds failed | ||
if: ${{ always() && !cancelled() && github.event_name != 'workflow_dispatch' && needs.pr-info.outputs.allowed_user == 'true' }} | ||
steps: | ||
|
||
- name: Clone repository | ||
# need the repo to successfully post a comment :-/ | ||
uses: actions/checkout@v3 | ||
with: | ||
ref: ${{ needs.pr-info.outputs.sha }} | ||
fetch-depth: 1 | ||
|
||
- name: Add comment with link to PR | ||
env: | ||
GH_TOKEN: ${{ github.token }} | ||
run: | | ||
sha="${{ needs.pr-info.outputs.sha }}" | ||
url="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}#artifacts" | ||
echo -e -n "Images built based on commit $sha:\n" > comment.txt | ||
if [[ "${{ needs.pr-info.outputs.args }}" == *"--boot.iso"* ]] ; then | ||
# <job>.result can be success, failure, cancelled, or skipped | ||
# https://docs.github.com/en/actions/learn-github-actions/contexts#jobs-context | ||
echo -e "- \`boot.iso\`: ${{ needs.boot-iso.result }}\n" >> comment.txt | ||
fi | ||
if [[ "${{ needs.pr-info.outputs.args }}" == *"--live"* ]] ; then | ||
echo -e "- Live: ${{ needs.live-iso.result }}\n" >> comment.txt | ||
fi | ||
if [[ "${{ needs.pr-info.outputs.args }}" == *"--updates.img"* ]] ; then | ||
echo -e "- \`updates.img\`: ${{ needs.updates-img.result }}\n" >> comment.txt | ||
fi | ||
echo -e "\nDownload the images from the bottom of the [job status page]($url).\n" >> comment.txt | ||
echo "Comment to be posted:" | ||
cat comment.txt | ||
gh pr comment \ | ||
${{ github.event.issue.number }} \ | ||
-F comment.txt |
Oops, something went wrong.