This document describes the Woodpecker CI pipeline used to build, export, upload, and publish a Love2D game project.
The pipeline logic is almost entirely encapsulated within a Makefile, which is called by each pipeline step. This approach simplifies the CI configuration and keeps the build logic centralized.
The pipeline performs the following steps:
metadata.json or git commit hash..love file and creates a web-compatible bundle using love.js.Each step corresponds to a make ci-* target.
- name: version
image: alpine
commands:
- apk add --no-cache git make jq
- make ci-version
What it does:
git, make, and jq for processing metadata.make ci-version, which:
metadata.json (if exists) or falls back to git short commit hash.main or master), prefixes the version as dev-<version>-<branch>..version file for subsequent steps to use.- name: export
image: alpine
commands:
- apk add --no-cache zip make curl unzip
- make ci-export
What it does:
zip, make, curl, and unzip for fetching dependencies and packaging.make ci-export, which:
.version file..love file.love.js to create a web-compatible version of the game..love file and the web folder into ZIP archives: love2ddemo-<version>.love.zip and love2ddemo-<version>.html.zip.- name: upload
image: alpine
environment:
DROPAREA_HOST: vps.teletype.hu
DROPAREA_PORT: 2223
DROPAREA_TARGET_PATH: /home/drop
DROPAREA_USER: drop
DROPAREA_SSH_PASSWORD:
from_secret: droparea_ssh_password
commands:
- apk add --no-cache make openssh-client sshpass
- make ci-upload
What it does:
make and SSH tooling (openssh-client, sshpass).make ci-upload, which:
.version file.metadata.json to love2ddemo-<version>.metadata.json..love.zip, .html.zip, and .metadata.json files to a remote server using scp.- name: update
image: alpine
environment:
UPDATE_SERVER: https://games.vps.teletype.hu
UPDATE_SECRET:
from_secret: update_secret_key
commands:
- apk add --no-cache make curl
- make ci-update
What it does:
make and curl.make ci-update, which:
.version file.love and one for love-web) with query parameters:
secret - Authorization tokenname - Project name (love2ddemo)platform - Platform identifier (love or love-web)version - Version from .version fileExample request:
https://games.vps.teletype.hu/update?secret=<SECRET>&name=love2ddemo&platform=love&version=1.0.0
After a successful run:
.love distribution and a web-ready bundle.This pipeline enables fully automated Love2D releases where the entire build and release logic is managed by the project's Makefile.