diff --git a/.gitignore b/.gitignore index 1301ac3..3b28dd7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ .local .vscode .DS_Store -bomberman.zip -bomberman/* +bombexpert.zip +bombexpert/* diff --git a/.woodpecker.yml b/.woodpecker.yml index c5d8924..5160a5a 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,20 +1,20 @@ -environment: &environment - GAME_NAME: bombexpert - GAME_LANG: lua - steps: + - name: version + image: alpine + commands: + - 'apk add --no-cache make' + - 'make ci-version' + - name: build image: git.teletype.hu/internal/tic80pro:latest environment: - <<: *environment XDG_RUNTIME_DIR: /tmp commands: - - tic80 --cli --skip --fs=. --cmd="load $GAME_NAME.$GAME_LANG & save $GAME_NAME & export html $GAME_NAME.html & exit" + - 'make ci-export' - name: artifact image: alpine environment: - <<: *environment DROPAREA_HOST: vps.teletype.hu DROPAREA_PORT: 2223 DROPAREA_TARGET_PATH: /home/drop @@ -22,17 +22,15 @@ steps: DROPAREA_SSH_PASSWORD: from_secret: droparea_ssh_password commands: - - apk add --no-cache openssh-client sshpass - - mkdir -p /root/.ssh - - sshpass -p $DROPAREA_SSH_PASSWORD scp -o StrictHostKeyChecking=no -P $DROPAREA_PORT $GAME_NAME.$GAME_LANG $GAME_NAME.tic $GAME_NAME.html.zip $DROPAREA_USER@$DROPAREA_HOST:$DROPAREA_TARGET_PATH + - 'apk add --no-cache make openssh-client sshpass' + - 'make ci-upload' - name: update image: alpine environment: - <<: *environment UPDATE_SERVER: https://games.vps.teletype.hu UPDATE_SECRET: from_secret: update_secret_key commands: - - apk add --no-cache curl - - curl "$UPDATE_SERVER/update?secret=$UPDATE_SECRET&name=$GAME_NAME&platform=tic80" + - 'apk add --no-cache make curl' + - 'make ci-update' \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1c1fbbf --- /dev/null +++ b/Makefile @@ -0,0 +1,112 @@ +# ----------------------------------------- +# Makefile – TIC-80 project builder +# ----------------------------------------- + +PROJECT = bombexpert + +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/bombexpert.lua + +# 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: + @echo "==> Extracting version" + @VERSION=$$(sed -n "s/^-- version: //p" inc/meta/meta.header.lua | head -n 1 | tr -d "[:space:]"); \ + 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/README.md b/README.md index adc8b97..5657a68 100644 --- a/README.md +++ b/README.md @@ -65,15 +65,6 @@ Then open http://localhost:3333 in your browser. - [TIC-80](https://tic80.com/) fantasy console (free version works) - Or any modern web browser (for HTML export) -## Project Structure - -``` -bomberman/ -├── bombexpert.lua # Main game source code -├── serve.py # Simple HTTP server for browser testing -└── README.md # This file -``` - ## Credits - **Author**: Zsolt Tasnadi diff --git a/bombexpert.inc b/bombexpert.inc new file mode 100644 index 0000000..e7b0b4e --- /dev/null +++ b/bombexpert.inc @@ -0,0 +1 @@ +bombexpert.lua \ No newline at end of file diff --git a/bombexpert.lua b/inc/bombexpert.lua similarity index 100% rename from bombexpert.lua rename to inc/bombexpert.lua