required: true
type: string
+env:
+ OS_CLOUD: "vex"
+ PACKER_VERSION: "1.9.1"
+
concurrency:
group: ${{ github.event.inputs.GERRIT_CHANGE_ID || github.run_id }}
cancel-in-progress: true
run: >-
pipx run tox
+ packer-validator:
+ needs: prepare
+ runs-on: ubuntu-latest
+ steps:
+ - name: Gerrit Checkout
+ # yamllint disable-line rule:line-length
+ uses: lfit/checkout-gerrit-change-action@70360ca2f8bee3e6a15224d8a03f8e017b1ac91f # v0.4
+ with:
+ gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
+ delay: "0s"
+ - name: Clone git submodules
+ shell: bash
+ run: git submodule update --init
+ - name: Check for changes
+ # yamllint disable-line rule:line-length
+ uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1
+ id: changes
+ with:
+ base: ${{ inputs.GERRIT_BRANCH }}
+ ref: ${{ inputs.GERRIT_PATCHSET_REVISION }}
+ filters: |
+ src:
+ - 'packer/**'
+ - name: Setup packer
+ if: steps.changes.outputs.src == 'true'
+ uses: hashicorp/setup-packer@main
+ id: setup
+ with:
+ version: ${{ env.PACKER_VERSION }}
+ - name: Create cloud-env file required for packer
+ id: create-cloud-env-file
+ if: steps.changes.outputs.src == 'true'
+ shell: bash
+ run: |
+ echo "${{ secrets.CLOUDS_ENV_B64 }}" | base64 --decode \
+ > "${GITHUB_WORKSPACE}/cloud-env.pkrvars.hcl"
+ - name: Create cloud.yaml file for openstack client
+ id: create-cloud-yaml-file
+ if: steps.changes.outputs.src == 'true'
+ shell: bash
+ run: |
+ mkdir -p "$HOME/.config/openstack"
+ echo "${{ secrets.CLOUDS_YAML_B64 }}" | base64 --decode \
+ > "$HOME/.config/openstack/clouds.yaml"
+ - name: Setup Python
+ if: steps.changes.outputs.src == 'true'
+ # yamllint disable-line rule:line-length
+ uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
+ with:
+ python-version: "3.11"
+ - name: Install openstack deps
+ id: install-openstack-deps
+ if: steps.changes.outputs.src == 'true'
+ shell: bash
+ run: |
+ python -m pip install --upgrade pip
+ pip install python-openstackclient
+ pip freeze
+ - name: Verify packer files
+ if: steps.changes.outputs.src == 'true'
+ shell: bash
+ run: |
+ set -x
+ cd packer
+
+ varfiles=(common-packer/vars/*.pkrvars.hcl)
+ templates=(templates/*.pkr.hcl)
+
+ mkdir -p "${GITHUB_WORKSPACE}/logs"
+ PACKER_LOGS_DIR="${GITHUB_WORKSPACE}/logs"
+
+ for varfile in "${varfiles[@]}"; do
+ if [[ "$varfile" == *"cloud-env.json"* ]] || \
+ [[ "$varfile" == "vars/*.json" ]] || \
+ [[ "$varfile" == *"cloud-env.pkrvars.hcl"* ]] || \
+ [[ "$varfile" == *"cloud-env-aws.pkrvars.hcl"* ]] || \
+ [[ "$varfile" == "vars/*.pkrvars.hcl" ]]; then
+ continue
+ fi
+
+ echo "::group::$varfile"
+ echo "-----> Test var: $varfile"
+ for template in "${templates[@]}"; do
+ if [[ "$template" == *"variables.pkr.hcl"* ]] || \
+ [[ "$template" == *"variables.auto.pkr.hcl"* ]]; then
+ continue
+ fi
+
+ if [[ "${template#*.}" == "pkr.hcl" ]]; then
+ echo "packer init $template ..."
+ packer init "$template"
+ fi
+
+ LOG_FILE="packer-validate-${varfile##*/}-${template##*/}.log"
+ export PACKER_LOG="yes"
+ export PACKER_LOG_PATH="$PACKER_LOGS_DIR/$LOG_FILE"
+ if output=$(OS_CLOUD=${{ env.OS_CLOUD }} packer validate \
+ -var-file="${GITHUB_WORKSPACE}/cloud-env.pkrvars.hcl" \
+ -var-file="$varfile" "$template"); then
+ echo "$template: $output"
+ else
+ echo "$template: $output"
+ exit 1
+ fi
+ done
+ echo "::endgroup::"
+ done
+
vote:
if: ${{ always() }}
- needs: [prepare, actionlint, pre-commit, jjb-validation, tox-verify]
+ needs:
+ [
+ prepare,
+ actionlint,
+ pre-commit,
+ jjb-validation,
+ tox-verify,
+ packer-validator,
+ ]
runs-on: ubuntu-latest
steps:
- uses: technote-space/workflow-conclusion-action@v3