install.fairie/.config/taskfiles/packer/Taskfile.yml
Brian Zalewski f42899b107 Latest
2022-12-24 15:04:59 -05:00

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'