--- version: '3' vars: TEMPLATE_FILE: '{{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}template.json{{end}}' VARIABLES_PATH: .variables.json tasks: build: deps: - :install:software:packer desc: Build Packer images for all available platforms summary: | # Build Packer images for all available virtualization platforms This task begins by removing cached files that may interfere with the Packer build process. It then runs `packer build template.json` if no arguments are passed. This command will build Packer images for all the virtualization platforms specified in the template file. The template file may include instructions for the following virtualization platforms (and it is possible that it includes other ones that are not listed below): * Hyper-V * KVM * Parallels * VMWare * VirtualBox If you would like to build machine images with another template then you can pass the template's file name as a parameter (see example below). **Example building on all available platforms:** `task packer:build` **Example using a template file named `another_template.json`:** `task packer:build -- another_template.json` hide: sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Encountered error while running `packer build` start: Running `packer build` for all supported platforms that are installed success: Successfully built the Packer images cmds: - task: prepare:template - rm -rf build - | IMAGES="," if type qemu-system-x86_64 &> /dev/null; then .config/log info 'QEMU is available' IMAGES="${IMAGES},qemu" fi if [ '{{OS}}' == 'darwin' ] && mdfind -name 'Parallels Desktop.app' &> /dev/null; then .config/log info 'Parallels is installed' IMAGES="${IMAGES},parallels-iso" fi if type vboxmanage &> /dev/null; then .config/log info 'VirtualBox is installed' task app:virtualbox:clear IMAGES="${IMAGES},virtualbox-iso" fi if [ '{{OS}}' == 'linux' ] && type vmware &> /dev/null; then .config/log info 'VMWare Workstation is installed' IMAGES="${IMAGES},vmware-iso" fi if [ '{{OS}}' == 'darwin' ] && type vmrun &> /dev/null; then .config/log info 'VMWare Fusion is installed' IMAGES="${IMAGES},vmware-iso" fi packer build -only=$(echo $IMAGES | sed 's/^.//') {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}template.json{{end}} install:platforms: desc: Install all available virtualization providers hide: sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' cmds: - task: :install:software:kvm - task: :install:software:parallels - task: :install:software:virtualbox - task: :install:software:vmware latestos: deps: - :install:pipx:latestos - :install:software:jq vars: TAG: sh: jq -r '.variables.latestos_tag' {{.TEMPLATE_FILE}} hide: sh: '[ "{{.REPOSITORY_TYPE}}" != "packer" ]' log: error: Error running `{{.PYTHON_HANDLE}}latestos {{.TAG}}` start: Running `{{.PYTHON_HANDLE}}latestos {{.TAG}}` success: Successfully ran `{{.PYTHON_HANDLE}}latestos {{.TAG}}` cmds: - | PATH="$PATH:$HOME/.local/bin" {{.PYTHON_HANDLE}}latestos {{.TAG}} status: - '[[ "{{.TAG}}}" == "macos" ]] || [ "${container:=}" == "docker" ]' preconditions: - sh: test -f {{.TEMPLATE_FILE}} msg: The `{{.TEMPLATE_FILE}}` file is missing from the root of this project. prepare: 'true' prepare:template: deps: - :install:software:jq log: error: Error preparing Packer template start: Preparing Packer template success: Successfully prepared Packer template cmds: - | TMP="$(mktemp)" if [ '{{OS}}' == 'linux' ]; then jq '.variables.accelerator = "kvm"' {{.TEMPLATE_FILE}} > "$TMP" elif [ '{{OS}}' == 'darwin' ]; then jq '.variables.accelerator = "hvf"' {{.TEMPLATE_FILE}} > "$TMP" else .config/log warn 'Windows not yet tested' fi mv "$TMP" {{.TEMPLATE_FILE}} publish: 'true' verify: 'true'