From baac570a15b883f721d8abe57ab01d0a829e9392 Mon Sep 17 00:00:00 2001 From: Danny Bessems Date: Fri, 25 Jul 2025 15:33:21 +1000 Subject: [PATCH] build: Generate cloud-init seed ISO --- .gitea/workflows/actions.yaml | 105 +++++++++++++++++++--------------- cloud-init/meta-data | 0 cloud-init/user-data.template | 28 +++++++++ 3 files changed, 88 insertions(+), 45 deletions(-) create mode 100644 cloud-init/meta-data create mode 100644 cloud-init/user-data.template diff --git a/.gitea/workflows/actions.yaml b/.gitea/workflows/actions.yaml index 0801e3d..50a47ea 100644 --- a/.gitea/workflows/actions.yaml +++ b/.gitea/workflows/actions.yaml @@ -2,62 +2,77 @@ name: build-image on: [push] jobs: - semrel_dryrun: - name: Semantic Release (Dry-run) - runs-on: ubuntu-latest - outputs: - version: ${{ steps.sem_rel.outputs.version }} - steps: - - name: Check out repository code - uses: actions/checkout@v3 - - name: Set up Node - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Install dependencies - run: | - npm install \ - semantic-release \ - @semantic-release/commit-analyzer \ - @semantic-release/exec - - name: Semantic Release (dry-run) - id: sem_rel - run: | - npx semantic-release \ - --package @semantic-release/exec \ - --package semantic-release \ - --branches ${{ gitea.refname }} \ - --tag-format 'v${version}' \ - --dry-run \ - --plugins @semantic-release/commit-analyzer,@semantic-release/exec \ - --analyzeCommits @semantic-release/commit-analyzer \ - --verifyRelease @semantic-release/exec \ - --verifyReleaseCmd 'echo "version=${nextRelease.version}" >> $GITHUB_OUTPUT' - env: - GIT_CREDENTIALS: ${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_APIKEY }} - - name: Assert semantic release output - run: | - [[ -z "${{ steps.sem_rel.outputs.version }}" ]] && { - echo 'No release tag - exiting'; exit 1 - } || { - echo 'Release tag set correctly: ${{ steps.sem_rel.outputs.version }}'; exit 0 + # semrel_dryrun: + # name: Semantic Release (Dry-run) + # runs-on: ubuntu-latest + # outputs: + # version: ${{ steps.sem_rel.outputs.version }} + # steps: + # - name: Check out repository code + # uses: actions/checkout@v3 + # - name: Set up Node + # uses: actions/setup-node@v3 + # with: + # node-version: 20 + # - name: Install dependencies + # run: | + # npm install \ + # semantic-release \ + # @semantic-release/commit-analyzer \ + # @semantic-release/exec + # - name: Semantic Release (dry-run) + # id: sem_rel + # run: | + # npx semantic-release \ + # --package @semantic-release/exec \ + # --package semantic-release \ + # --branches ${{ gitea.refname }} \ + # --tag-format 'v${version}' \ + # --dry-run \ + # --plugins @semantic-release/commit-analyzer,@semantic-release/exec \ + # --analyzeCommits @semantic-release/commit-analyzer \ + # --verifyRelease @semantic-release/exec \ + # --verifyReleaseCmd 'echo "version=${nextRelease.version}" >> $GITHUB_OUTPUT' + # env: + # GIT_CREDENTIALS: ${{ secrets.GIT_USERNAME }}:${{ secrets.GIT_APIKEY }} + # - name: Assert semantic release output + # run: | + # [[ -z "${{ steps.sem_rel.outputs.version }}" ]] && { + # echo 'No release tag - exiting'; exit 1 + # } || { + # echo 'Release tag set correctly: ${{ steps.sem_rel.outputs.version }}'; exit 0 } build_image: name: Build image runs-on: ubuntu-latest - needs: semrel_dryrun - # container: ghcr.io/catthehacker/ubuntu:act-latest + # needs: semrel_dryrun steps: - name: Check out repository code uses: actions/checkout@v4 - - name: Print Hello - run: echo "Hello from Harvester!" + - name: Generate seed ISO + shell: bash + run: | + apt-get update && \ + apt-get install -y \ + genisoimage + + sed "s/__ROOT_HASHED_PASSWORD__/${{ secrets.ROOT_HASHED_PASSWORD }}/g" \ + cloud-init/user-data.template > cloud-init/user-data + sed "s/__PUBLIC_SSHKEY__/${{ secrets.PUBLIC_SSHKEY }}/g" \ + cloud-init/user-data.template > cloud-init/user-data + + genisoimage \ + -output seed.iso \ + -volid cidata \ + -joliet \ + -rock \ + cloud-init/meta-data cloud-init/user-data # semrel: # name: Semantic Release - # runs-on: dind-rootless - # needs: [build_container,build_chart] + # runs-on: ubuntu-latest + # needs: build_image # steps: # - name: Check out repository code # uses: actions/checkout@v3 diff --git a/cloud-init/meta-data b/cloud-init/meta-data new file mode 100644 index 0000000..e69de29 diff --git a/cloud-init/user-data.template b/cloud-init/user-data.template new file mode 100644 index 0000000..6959f1f --- /dev/null +++ b/cloud-init/user-data.template @@ -0,0 +1,28 @@ +#cloud-config +package_update: true +package_upgrade: true +snap: + commands: + 00: snap refresh --hold=forever +package_reboot_if_required: true +packages: + - qemu-guest-agent + - yq + - cifs-utils + +runcmd: + - apt-get install -y linux-modules-extra-$(uname -r) + - sysctl -w net.ipv6.conf.all.disable_ipv6=1 + - systemctl enable --now qemu-guest-agent.service + +disable_root: false +users: + - name: root + hashed_passwd: __ROOT_HASHED_PASSWORD__ + lock_passwd: false + shell: /bin/bash + ssh_authorized_keys: + - __PUBLIC_SSHKEY__ +ssh_authorized_keys: + - > + __PUBLIC_SSHKEY__