commit 22ce529edc4b71fded04a915e9a22ecfcbd8e241 Author: Zsolt Tasnadi Date: Thu Jan 29 23:51:34 2026 +0100 initial commit diff --git a/example-makefile.make b/example-makefile.make new file mode 100644 index 0000000..9fde949 --- /dev/null +++ b/example-makefile.make @@ -0,0 +1,117 @@ +# ----------------------------------------- +# Makefile – TIC-80 project builder +# ----------------------------------------- + +PROJECT = impostor + +ORDER = $(PROJECT).inc +OUTPUT = $(PROJECT).lua +OUTPUT_ZIP = $(PROJECT).html.zip +OUTPUT_TIC = $(PROJECT).tic + +SRC_DIR = inc +SRC = $(shell sed 's|^|$(SRC_DIR)/|' $(ORDER)) + +ASSETS_LUA = inc/meta/meta.assets.lua +ASSETS_DIR = assets +ASSET_TYPES = tiles sprites sfx music + +# CI/CD variables +VERSION_FILE = .version +GAME_LANG ?= lua +DROPAREA_HOST ?= vps.teletype.hu +DROPAREA_PORT ?= 2223 +DROPAREA_TARGET_PATH ?= /home/drop +DROPAREA_USER ?= drop +UPDATE_SERVER ?= https://games.vps.teletype.hu + +all: build + +build: $(OUTPUT) + +$(OUTPUT): $(SRC) $(ORDER) + @rm -f $(OUTPUT) + @while read f; do \ + cat "$(SRC_DIR)/$$f" >> $(OUTPUT); \ + echo "" >> $(OUTPUT); \ + done < $(ORDER) + +export: build + @if [ -z "$(VERSION)" ]; then \ + echo "ERROR: VERSION not set!"; \ + exit 1; \ + fi + @echo "==> Exporting HTML for version $(VERSION)" + @tic80 --cli --skip --fs=. \ + --cmd="load $(OUTPUT) & save $(PROJECT)-$(VERSION) & export html $(PROJECT)-$(VERSION).html & exit" + @echo "==> Creating versioned files" + @if [ -f "$(PROJECT)-$(VERSION).tic" ]; then \ + cp $(PROJECT)-$(VERSION).tic $(PROJECT).tic; \ + fi + @if [ -f "$(PROJECT)-$(VERSION).html.zip" ]; then \ + cp $(PROJECT)-$(VERSION).html.zip $(PROJECT).html.zip; \ + fi + @echo "==> Generated files:" + @ls -lh $(PROJECT)-$(VERSION).* $(PROJECT).tic $(PROJECT).html.zip 2>/dev/null || true + +watch: + make build + fswatch -o $(SRC_DIR) $(ORDER) assets | while read; do make build; done + +import_assets: + @for t in $(ASSET_TYPES); do \ + for f in $(ASSETS_DIR)/$$t/*.png; do \ + [ -e "$$f" ] || continue; \ + echo "==> Importing $$f as $$t..."; \ + tic80 --cli --skip --fs=. --cmd="import $$t $$f & exit"; \ + done; \ + done + +export_assets: build + @echo "==> Exporting TIC-80 asset sections" + @mkdir -p inc/meta + @sed -n '/^-- /,/^-- <\/PALETTE>/p;\ + /^-- /,/^-- <\/TILES>/p;\ + /^-- /,/^-- <\/SPRITES>/p;\ + /^-- /,/^-- <\/MAP>/p;\ + /^-- /,/^-- <\/SFX>/p;\ + /^-- /,/^-- <\/MUSIC>/p' \ + $(OUTPUT) > $(ASSETS_LUA) + +clean: + @rm -f $(PROJECT)-*.tic $(PROJECT)-*.html.zip $(OUTPUT) + @echo "==> Cleaned build artifacts" + +# CI/CD Targets +ci-version: + @VERSION=$$(sed -n "s/^-- version: //p" inc/meta/meta.header.lua | head -n 1 | tr -d "[:space:]"); \ + BRANCH=$${CI_COMMIT_BRANCH:-$${WOODPECKER_BRANCH}}; \ + if [ "$$BRANCH" != "main" ] && [ "$$BRANCH" != "master" ] && [ -n "$$BRANCH" ]; then \ + VERSION=dev-$$VERSION-$$BRANCH; \ + fi; \ + echo "VERSION is: $$VERSION"; \ + echo $$VERSION > $(VERSION_FILE) + +ci-export: + @VERSION=$$(cat $(VERSION_FILE)); \ + echo "==> Building and exporting version $$VERSION"; \ + $(MAKE) export VERSION=$$VERSION + +ci-upload: + @VERSION=$$(cat $(VERSION_FILE)); \ + echo "==> Uploading artifacts for version $$VERSION"; \ + ls -lh $(PROJECT)-$$VERSION.* $(PROJECT).tic $(PROJECT).html.zip 2>/dev/null || true; \ + cp $(PROJECT).lua $(PROJECT)-$$VERSION.lua; \ + FILE_LUA=$(PROJECT)-$$VERSION.lua; \ + FILE_TIC=$(PROJECT)-$$VERSION.tic; \ + FILE_HTML_ZIP=$(PROJECT)-$$VERSION.html.zip; \ + SCP_TARGET="$(DROPAREA_USER)@$(DROPAREA_HOST):$(DROPAREA_TARGET_PATH)/"; \ + sshpass -p "$(DROPAREA_SSH_PASSWORD)" scp -o StrictHostKeyChecking=no -P $(DROPAREA_PORT) $$FILE_LUA $$FILE_TIC $$FILE_HTML_ZIP $$SCP_TARGET + +ci-update: + @VERSION=$$(cat $(VERSION_FILE)); \ + echo "==> Triggering update for version $$VERSION"; \ + curl "$(UPDATE_SERVER)/update?secret=$(UPDATE_SECRET)&name=$(PROJECT)&platform=tic80&version=$$VERSION" + +.PHONY: all build export watch import_assets export_assets clean ci-version ci-export ci-upload ci-update + diff --git a/example-woodpecker.yaml b/example-woodpecker.yaml new file mode 100644 index 0000000..5160a5a --- /dev/null +++ b/example-woodpecker.yaml @@ -0,0 +1,36 @@ +steps: + - name: version + image: alpine + commands: + - 'apk add --no-cache make' + - 'make ci-version' + + - name: build + image: git.teletype.hu/internal/tic80pro:latest + environment: + XDG_RUNTIME_DIR: /tmp + commands: + - 'make ci-export' + + - name: artifact + 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' + + - 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' \ No newline at end of file