From 3dc05c0efc418d311d020e3e08b4aa593c607a44 Mon Sep 17 00:00:00 2001 From: Jason N <33561705+JasonN3@users.noreply.github.com> Date: Thu, 14 Mar 2024 20:38:19 -0400 Subject: [PATCH] Fix post scripts and use multiple OS versions in tests (#70) --- .github/workflows/build-and-test.yml | 31 +++++++++-------------- Makefile | 38 +++++++++++++++++++--------- README.md | 36 +++++++++++++------------- tests/vm/flatpak_update.yml | 4 ++- 4 files changed, 59 insertions(+), 50 deletions(-) diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 5884ad6..a1aa320 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,4 +1,4 @@ -name: Create and publish an ISO +name: Tests on: push: @@ -26,6 +26,7 @@ env: jobs: build-container: + name: Build Container Image runs-on: ubuntu-latest permissions: contents: read @@ -67,6 +68,7 @@ jobs: password: ${{ github.token }} build-and-push-iso: + name: Build ISO runs-on: ubuntu-latest needs: - build-container @@ -110,13 +112,13 @@ jobs: arch: ${{ env.ARCH}} image_name: ${{ env.IMAGE_NAME}} image_repo: ${{ env.IMAGE_REPO}} - image_tag: ${{ env.IMAGE_TAG }} + image_tag: ${{ matrix.version }} version: ${{ matrix.version }} variant: ${{ env.VARIANT }} flatpak_remote_refs_dir: ${{ env.FLATPAK_REMOTE_REFS_DIR }} secure_boot_key_url: ${{ env.SECURE_BOOT_KEY_URL }} enrollment_password: ${{ env.ENROLLMENT_PASSWORD }} - iso_name: ${{ env.IMAGE_NAME }}-${{ env.IMAGE_TAG }}-${{ matrix.version }}.iso + iso_name: ${{ env.IMAGE_NAME }}-${{ matrix.version }}-${{ matrix.version }}.iso - name: Save output id: save_output @@ -138,6 +140,7 @@ jobs: overwrite: true test-qemu: + name: Test ISO runs-on: ubuntu-latest needs: - build-and-push-iso @@ -158,10 +161,11 @@ jobs: with: submodules: recursive - - name: Ensure qemu is installed + - name: Install test tools run: | sudo apt-get update - sudo apt-get install -y qemu qemu-utils xorriso unzip qemu-system-x86 netcat socat jq isomd5sum ansible make coreutils + sudo apt-get install -y make + sudo make install-test-deps PACKAGE_MANAGER=apt-get - name: Create disk run: | @@ -184,7 +188,7 @@ jobs: ARCH=${{ env.ARCH}} \ IMAGE_NAME=${{ env.IMAGE_NAME}} \ IMAGE_REPO=${{ env.IMAGE_REPO}} \ - IMAGE_TAG=${{ env.IMAGE_TAG }} \ + IMAGE_TAG=${{ matrix.version }} \ VERSION=${{ matrix.version }} \ VARIANT=${{ env.VARIANT }} \ FLATPAK_REMOTE_REFS_DIR=${{ env.FLATPAK_REMOTE_REFS_DIR }} \ @@ -250,7 +254,7 @@ jobs: timeout 1m bash -c "while ! (echo > /dev/tcp/127.0.0.1/4321); do sleep 0.1; done" (tail -f vm.stdin | nc localhost 4321 | tee vm.stdout) & - timeout 30m bash -c "while ! (grep 'login:' vm.stdout); do sleep 1; done" + timeout 30m bash -c "while ! (echo > /dev/tcp/${VM_IP}/${VM_PORT}); do sleep 1; done" if ! (echo > /dev/tcp/${VM_IP}/${VM_PORT}) then @@ -258,17 +262,6 @@ jobs: fi echo "VM ready for tests at IP ${VM_IP}:${VM_PORT}" - echo "Creating Ansible inventory" - cat << EOF > ansible_inventory - ungrouped: - hosts: - vm: - ansible_host: ${VM_IP} - ansible_port: ${VM_PORT} - ansible_user: ${VM_USER} - ansible_password: ${VM_PASS} - ansible_ssh_common_args: '-o StrictHostKeyChecking=no' - EOF - #make test-vm + make test-vm VM_IP=${VM_IP} VM_PORT=${VM_PORT} VM_USER=${VM_USER} VM_PASS=${VM_PASS} kill $QEMU_PID diff --git a/Makefile b/Makefile index 1d6a94e..5058868 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,8 @@ SECURE_BOOT_KEY_URL = # Cache DNF_CACHE = +PACKAGE_MANAGER = dnf + # Functions ## Formatting = lowercase # Get a list of templates for the feature @@ -75,7 +77,7 @@ _LORAX_ARGS = _LORAX_TEMPLATES = $(call get_templates,install) _REPO_FILES = $(subst /etc/yum.repos.d,repos,$(REPOS)) _TEMP_DIR = $(shell mktemp -d) -_TEMPLATE_VARS = ARCH IMAGE_NAME IMAGE_REPO _IMAGE_REPO_DOUBLE_ESCAPED _IMAGE_REPO_ESCAPED IMAGE_TAG REPOS _RHEL VARIANT VERSION WEB_UI +_TEMPLATE_VARS = ARCH _BASE_DIR IMAGE_NAME IMAGE_REPO _IMAGE_REPO_DOUBLE_ESCAPED _IMAGE_REPO_ESCAPED IMAGE_TAG REPOS _RHEL VARIANT VERSION WEB_UI _VOLID = $(firstword $(subst -, ,$(IMAGE_NAME)))-$(ARCH)-$(IMAGE_TAG) ifeq ($(findstring redhat.repo,$(REPOS)),redhat.repo) @@ -136,11 +138,7 @@ external/lorax/branch-$(VERSION): # Step 1: Generate Lorax Templates lorax_templates/post_%.tmpl: lorax_templates/scripts/post/% - # Support interactive-defaults.ks - ([ ${_RHEL} == false ] && [ $(VERSION) -le 38 ]) && ($(call convert_post_to_tmpl,$*,usr/share/anaconda/interactive-defaults.ks,true)) || true - - # Support new Anaconda method - ([ ${_RHEL} == true ] || [ $(VERSION) -ge 39 ]) && ($(call convert_post_to_tmpl,$*,usr/share/anaconda/post-scripts/$*.sh,true)) || true + $(call convert_post_to_tmpl,$*,usr/share/anaconda/post-scripts/$*.ks,true) repos: $(_REPO_FILES) @@ -209,7 +207,13 @@ clean: rm -f $(_BASE_DIR)/*.log || true install-deps: - dnf install -y lorax xorriso skopeo flatpak dbus-daemon ostree coreutils gettext git + if [ "$(PACKAGE_MANAGER)" =~ apt.* ]; then $(PACKAGE_MANAGER) update; fi + $(PACKAGE_MANAGER) install -y lorax xorriso skopeo flatpak dbus-daemon ostree coreutils gettext git + +install-test-deps: + if [ "$(PACKAGE_MANAGER)" =~ apt.* ]; then $(PACKAGE_MANAGER) update; fi + $(PACKAGE_MANAGER) install -y qemu qemu-utils xorriso unzip qemu-system-x86 netcat socat jq isomd5sum ansible make coreutils squashfs-tools + test: test-iso test-vm @@ -217,8 +221,6 @@ test-iso: $(eval _TESTS = $(filter-out README.md,$(shell ls tests/iso))) $(eval _VARS = VERSION FLATPAK_REMOTE_NAME _FLATPAK_REPO_URL) - sudo apt-get update - sudo apt-get install -y squashfs-tools sudo modprobe loop sudo mkdir /mnt/iso /mnt/install sudo mount -o loop deploy.iso /mnt/iso @@ -245,9 +247,21 @@ test-iso: sudo umount /mnt/install sudo umount /mnt/iso -test-vm: +ansible_inventory: + echo "ungrouped:" > ansible_inventory + echo " hosts:" >> ansible_inventory + echo " vm:" >> ansible_inventory + echo " ansible_host: ${VM_IP}" >> ansible_inventory + echo " ansible_port: ${VM_PORT}" >> ansible_inventory + echo " ansible_user: ${VM_USER}" >> ansible_inventory + echo " ansible_password: ${VM_PASS}" >> ansible_inventory + echo " ansible_become_pass: ${VM_PASS}" >> ansible_inventory + echo " ansible_ssh_common_args: '-o StrictHostKeyChecking=no'" >> ansible_inventory + +test-vm: ansible_inventory + ansible -i ansible_inventory -m ansible.builtin.wait_for_connection vm $(eval _TESTS = $(filter-out README.md,$(shell ls tests/vm))) chmod +x $(foreach test,$(_TESTS),tests/vm/$(test)) - for test in $(_TESTS); do ./tests/vm/$${test} deploy.iso; done + for test in $(_TESTS); do ./tests/vm/$${test}; done -.PHONY: clean install-deps test test-iso test-vm +.PHONY: clean install-deps install-test-deps test test-iso test-vm diff --git a/README.md b/README.md index f6c0280..44792b0 100644 --- a/README.md +++ b/README.md @@ -38,24 +38,24 @@ See [Customizing](#customizing) for information about customizing the ISO that g The following variables can be used to customize the created ISO. ### Inputs -| Variable | Description | Default Value | -| ---------------------- | ---------------------------------------------------------------------------- | -------------------------------------------- | -| additional_templates | Space delimited list of additional Lorax templates to include | \[empty\] | -| arch | Architecture for image to build | x86_64 | -| enrollment_password | Used for supporting secure boot (requires SECURE_BOOT_KEY_URL to be defined) | container-installer | -| extra_boot_params | Extra params used by grub to boot the anaconda installer | \[empty\] | -| flatpak_remote_name | Name of the Flatpak repo on the destination OS | flathub | -| flatpak_remote_refs | Space separated list of flatpak refs to install | \[empty\] | -| flatpak_remote_refs_dir | Directory that contains files that list the flatpak refs to install | \[empty\] | -| flatpak_remote_url | URL of the flatpakrepo file | https://flathub.org/repo/flathub.flatpakrepo | -| image_name | Name of the source container image | base | -| image_repo | Repository containing the source container image | quay.io/fedora-ostree-desktops | -| image_tag | Tag of the source container image | *VERSION* | -| iso_name | Name of the ISO you wish to output when completed | build/deploy.iso | -| secure_boot_key_url | Secure boot key that is installed from URL location\*\* | \[empty\] | -| variant | Source container variant\* | Server | -| version | Fedora version of installer to build | 39 | -| web_ui | Enable Anaconda WebUI (experimental) | false | +| Variable | Description | Default Value | Action | Container | Makefile | +| ----------------------- | ---------------------------------------------------------------------------- | -------------------------------------------- | ------------------ | ------------------ | ------------------ | +| additional_templates | Space delimited list of additional Lorax templates to include | \[empty\] | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| arch | Architecture for image to build | x86_64 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| enrollment_password | Used for supporting secure boot (requires SECURE_BOOT_KEY_URL to be defined) | container-installer | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| extra_boot_params | Extra params used by grub to boot the anaconda installer | \[empty\] | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| flatpak_remote_name | Name of the Flatpak repo on the destination OS | flathub | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| flatpak_remote_refs | Space separated list of flatpak refs to install | \[empty\] | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| flatpak_remote_refs_dir | Directory that contains files that list the flatpak refs to install | \[empty\] | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| flatpak_remote_url | URL of the flatpakrepo file | https://flathub.org/repo/flathub.flatpakrepo | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| image_name | Name of the source container image | base | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| image_repo | Repository containing the source container image | quay.io/fedora-ostree-desktops | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| image_tag | Tag of the source container image | *VERSION* | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| iso_name | Name of the ISO you wish to output when completed | build/deploy.iso | :white_check_mark: | :x: | :x: | +| secure_boot_key_url | Secure boot key that is installed from URL location\*\* | \[empty\] | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| variant | Source container variant\* | Server | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| version | Fedora version of installer to build | 39 | :white_check_mark: | :white_check_mark: | :white_check_mark: | +| web_ui | Enable Anaconda WebUI (experimental) | false | :white_check_mark: | :white_check_mark: | :white_check_mark: | \*Available options for VARIANT can be found by running `dnf provides system-release`. Variant will be the third item in the package name. Example: `fedora-release-kinoite-39-34.noarch` will be kinoite diff --git a/tests/vm/flatpak_update.yml b/tests/vm/flatpak_update.yml index 6f46263..7d004cd 100644 --- a/tests/vm/flatpak_update.yml +++ b/tests/vm/flatpak_update.yml @@ -5,6 +5,8 @@ gather_facts: no tasks: + # Verifies that the GPG key is functional - name: Test updating flatpak packages + become: true ansible.builtin.command: - cmd: /usr/bin/flatpak update -y + cmd: /usr/bin/flatpak update -y --noninteractive