From 255f6f68e60d08f12b2aa54b234d5eaabb9b3f82 Mon Sep 17 00:00:00 2001 From: Greg Hellings Date: Tue, 12 Dec 2023 11:57:09 -0600 Subject: [PATCH] Test on SHR (#15) * Test on SHR * Fix name? Maybe? * Restore proper Bash syntax * Simplify build * Pin to Isaiah * Update to checktout v4 * Bring back the caching * Set plugin path locally * Separate jobs, just so I can handle this * Allow easier target switching * Test just qemu * Constrain HTTP ports * Prevent resource collision for network * Re-enable building all * Try only vbox --- .github/workflows/build.yml | 43 +++++++++++-------------------------- lib/provider.py | 4 ++-- sources/inputs.pkr.hcl | 10 +++++++++ sources/qemu.pkr.hcl | 6 +++--- 4 files changed, 28 insertions(+), 35 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 616242e..7128e65 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -9,21 +9,21 @@ name: Build the boxes pull_request: env: - PACKER_PLUGIN_PATH: "~/.config/packer/plugins" + PACKER_PLUGIN_PATH: ".config/packer/plugins" jobs: collect: name: Discover distros runs-on: ubuntu-latest outputs: - distros: ${{ steps.distros.outputs.distros }} + boxen: ${{ steps.distros.outputs.some }} build: ${{ steps.time.outputs.time }} steps: - name: Checkout code uses: actions/checkout@v3 - name: Install python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3 cache: pip @@ -34,7 +34,8 @@ jobs: run: |- set -exo pipefail pip install xonsh PyYAML - echo "distros=$(xonsh build.xsh -a --list)" >> "$GITHUB_OUTPUT" + echo "all=$(xonsh build.xsh -a --list)" >> "$GITHUB_OUTPUT" + echo "some=$(xonsh build.xsh -b virtualbox-iso.amd64 -a --list)" >> "$GITHUB_OUTPUT" - name: Find timestamp for versioning id: time @@ -43,34 +44,16 @@ jobs: format: 'YYYY.MM.DD.HH' build: - name: Build box + name: Build boxes runs-on: ${{ matrix.runner }} needs: - collect strategy: fail-fast: false - matrix: ${{ fromJson( needs.collect.outputs.distros ) }} + matrix: ${{ fromJson( needs.collect.outputs.boxen ) }} steps: - name: Checkout project - uses: actions/checkout@v3 - - - name: Install Packer and related tools - uses: ./.github/actions/install_packer - - - name: Clear disk space - uses: greg-hellings/make-space@main - - - name: Output tool versions - shell: bash - run: | - set -x - packer -version - if $(type qemu-system-x86_64); then - qemu-system-x86_64 -version - fi - if $(type VBoxManage); then - VBoxManage --version; - fi + uses: actions/checkout@v4 - name: Run generator, if necessary shell: bash @@ -83,7 +66,7 @@ jobs: uses: actions/cache/restore@v3 id: cache-restore with: - path: ${{ runner.os == 'Linux' && '~/.config/packer/plugins' || '/usr/local/bin/github.com' }} + path: .config/packer/plugins key: ${{ runner.os }}-${{ hashFiles('sources/build.pkr.hcl') }} - name: Install Packer plugins @@ -94,7 +77,7 @@ jobs: uses: actions/cache/save@v3 if: always() with: - path: ${{ runner.os == 'Linux' && '~/.config/packer/plugins' || '/usr/local/bin/github.com' }} + path: .config/packer/plugins key: ${{ steps.cache-restore.outputs.cache-primary-key }} - name: Build @@ -104,16 +87,16 @@ jobs: # Add a retry in case something bogus like a network failure happens packer build -only="${{ matrix.builder }}" \ -var-file="${{ matrix.distro }}" \ - -var "qemu_accelerator=tcg" \ -var "build=${{ needs.collect.outputs.build }}" \ - -var "cpu_model=Skylake-Client" \ -var "cpus=2" \ -var "memory=4096" \ + -var "http_port_min=${HTTP_PORT_MIN:-8000}" \ + -var "http_port_max=${HTTP_PORT_MAX:-9000}" \ ${{ github.event_name != 'release' && '-except=upload' || '' }} \ sources env: VAGRANT_CLOUD_TOKEN: ${{ secrets.VAGRANT_CLOUD_TOKEN }} - PACKER_LOG: 1 #${{ contains(matrix.needs_timeout, matrix.distro) && '0' || '0' }} + PACKER_LOG: 1 - name: Upload artifact if: ${{ failure() }} diff --git a/lib/provider.py b/lib/provider.py index 1642ce3..aac5569 100644 --- a/lib/provider.py +++ b/lib/provider.py @@ -9,7 +9,7 @@ class Provider: @property def runner(self) -> str: if self.name == "qemu": - return "ubuntu-latest" + return "isaiah" elif self.name.startswith("virtualbox"): - return "macos-12" + return "isaiah" return None diff --git a/sources/inputs.pkr.hcl b/sources/inputs.pkr.hcl index 9c0095d..5e9c317 100644 --- a/sources/inputs.pkr.hcl +++ b/sources/inputs.pkr.hcl @@ -74,6 +74,16 @@ variable "http_directory" { default = "" } +variable "http_port_min" { + type = number + default = 8000 +} + +variable "http_port_max" { + type = number + default = 9000 +} + variable "cpu_model" { type = string default = "host" diff --git a/sources/qemu.pkr.hcl b/sources/qemu.pkr.hcl index 63b5f7c..f1d482a 100644 --- a/sources/qemu.pkr.hcl +++ b/sources/qemu.pkr.hcl @@ -28,16 +28,16 @@ source "qemu" "amd64" { qemuargs = [ #["-chardev", "stdio,id=char0,logfile=serial-output-qemu-${var.arch}-${var.distro}-${var.version},signal=off"], - #["-serial", "chardev:char0"], - ["-chardev", "socket,host=localhost,port=9876,server=on,wait=off,id=qga0"], + ["-chardev", "socket,path=${local.name}.qga.sock,server=on,wait=off,id=qga0"], ["-device", "virtio-serial"], ["-device", "virtserialport,chardev=qga0,name=org.qemu.guest_agent.0"], - ["-qmp", "tcp:localhost:4444,server,wait=off"], ] accelerator = var.qemu_accelerator http_content = var.http_files http_directory = var.http_directory + http_port_min = var.http_port_min + http_port_max = var.http_port_max cd_content = var.cd_content cd_files = var.cd_files cd_label = var.cd_label