127 lines
4.2 KiB
YAML
127 lines
4.2 KiB
YAML
---
|
|
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'
|