Files
grout/taskfile.yml
Georges-Antoine Assi 92a3c06196 bot generated save sync
2026-03-20 21:52:45 -04:00

356 lines
12 KiB
YAML

version: '3'
dotenv: ['.env']
vars:
IMAGE_NAME: grout-build
CONTAINER_NAME: grout-extract
LABEL: app.romm.grout.build=true
NO_CACHE: ""
tasks:
build:
desc: Build for ARM64
cmds:
- rm -rf build64
- docker buildx build {{.NO_CACHE}} --platform=linux/arm64 --build-arg GITHUB_ACTIONS=false --label {{.LABEL}} --load -t {{.IMAGE_NAME}} -f docker/Dockerfile .
silent: true
build-amd64:
desc: Build for AMD64 (x86_64)
cmds:
- rm -rf build64
- docker buildx build {{.NO_CACHE}} --load --platform=linux/amd64 --build-arg GITHUB_ACTIONS=false --label {{.LABEL}} -t {{.IMAGE_NAME}}-amd64 -f docker/Dockerfile .
silent: true
build-32:
desc: Build for ARM32
cmds:
- rm -rf build32
- docker buildx build {{.NO_CACHE}} --platform=linux/arm/v7 --build-arg GITHUB_ACTIONS=false --label {{.LABEL}} -t {{.IMAGE_NAME}} -f docker/32.Dockerfile .
silent: true
build-local:
desc: Build for ARM64 using local gabagool workspace
cmds:
- rm -rf build64
- cd .. && docker buildx build {{.NO_CACHE}} --platform=linux/arm64 --build-arg USE_LOCAL_GABAGOOL=true --build-arg GITHUB_ACTIONS=false --label {{.LABEL}} --load -f grout/docker/Dockerfile -t {{.IMAGE_NAME}} .
silent: true
build-32-local:
desc: Build for ARM32 using local gabagool workspace
cmds:
- rm -rf build32
- cd .. && docker buildx build {{.NO_CACHE}} --platform=linux/arm/v7 --build-arg USE_LOCAL_GABAGOOL=true --build-arg GITHUB_ACTIONS=false --label {{.LABEL}} -f grout/docker/32.Dockerfile -t {{.IMAGE_NAME}} .
silent: true
extract:
desc: Extract binary and libraries from Docker image
cmds:
- mkdir -p build64/lib
- docker rm {{.CONTAINER_NAME}} 2>/dev/null || true
- docker create --name {{.CONTAINER_NAME}} --label {{.LABEL}} {{.IMAGE_NAME}}
- docker cp {{.CONTAINER_NAME}}:/build/grout build64/grout
- docker cp {{.CONTAINER_NAME}}:/usr/lib/aarch64-linux-gnu/libSDL2_gfx-1.0.so.0.0.2 build64/lib/libSDL2_gfx-1.0.so.0
- docker rm {{.CONTAINER_NAME}}
silent: true
extract-amd64:
desc: Extract binary and libraries from AMD64 Docker image
cmds:
- mkdir -p build/lib
- docker rm {{.CONTAINER_NAME}} 2>/dev/null || true
- docker create --name {{.CONTAINER_NAME}} --label {{.LABEL}} {{.IMAGE_NAME}}-amd64
- docker cp {{.CONTAINER_NAME}}:/build/grout build/grout
- docker cp {{.CONTAINER_NAME}}:/usr/lib/x86_64-linux-gnu/libSDL2_gfx-1.0.so.0.0.2 build/lib/libSDL2_gfx-1.0.so.0
- docker rm {{.CONTAINER_NAME}}
silent: true
extract-32:
desc: Extract binary and libraries from Docker image
cmds:
- mkdir -p build32/lib
- docker rm {{.CONTAINER_NAME}} 2>/dev/null || true
- docker create --name {{.CONTAINER_NAME}} --label {{.LABEL}} {{.IMAGE_NAME}}
- docker cp {{.CONTAINER_NAME}}:/build/grout build32/grout
# - docker cp {{.CONTAINER_NAME}}:/usr/lib/arm-linux-gnueabihf/libSDL2_gfx-1.0.so.0.0.2 build32/lib/libSDL2_gfx-1.0.so.0 # TODO replace with custom SDL build for Miyoo
- docker rm {{.CONTAINER_NAME}}
silent: true
package:
desc: Package for all platforms
deps: [ package-next, package-muos, package-knulli, package-spruce, package-rocknix, package-trimui, package-allium, package-batocera ]
silent: true
package-next:
desc: Package for NextUI
cmds:
- rm -rf build64/Grout.pak
- mkdir -p build64/Grout.pak/lib
- cp build64/grout scripts/NextUI/launch.sh README.md LICENSE pak.json build64/Grout.pak
- cp -R build64/lib/* build64/Grout.pak/lib/
- chmod +x build64/Grout.pak/grout build64/Grout.pak/launch.sh
silent: true
package-muos:
desc: Package for muOS
cmds:
- rm -rf build64/muOS build64/Grout.muxapp
- mkdir -p build64/muOS/Grout/lib
- cp build64/grout scripts/muOS/mux_launch.sh README.md LICENSE build64/muOS/Grout
- cp -R build64/lib/* build64/muOS/Grout/lib/
- cp -R scripts/muOS/resources build64/muOS/Grout/
- chmod +x build64/muOS/Grout/grout build64/muOS/Grout/mux_launch.sh
- cd build64/muOS && zip -r ../Grout.muxapp Grout
silent: true
package-knulli:
desc: Package for Knulli
cmds:
- rm -rf build64/Knulli
- mkdir -p build64/Knulli/Grout/lib
- cp build64/grout scripts/Knulli/Grout.sh scripts/Knulli/logo.png README.md LICENSE build64/Knulli/Grout
- cp -R build64/lib/* build64/Knulli/Grout/lib/
- chmod +x build64/Knulli/Grout/grout build64/Knulli/Grout/Grout.sh
silent: true
package-spruce:
desc: Package for Spruce
cmds:
- rm -rf build64/Spruce
- mkdir -p build64/Spruce/Grout/grout/lib
- cp scripts/Spruce/* README.md LICENSE build64/Spruce/Grout
- cp build64/grout build64/Spruce/Grout/grout
- cp -R build64/lib/* build64/Spruce/Grout/grout/lib/
- chmod +x build64/Spruce/Grout/grout/grout build64/Spruce/Grout/launch.sh build64/Spruce/Grout/launch-universal.sh
silent: true
package-allium:
desc: Package for Allium
cmds:
- rm -rf build64/Allium
- mkdir -p build64/Allium/Grout.pak/grout/lib
- cp -R scripts/Allium/* build64/Allium/Grout.pak
- cp build32/grout README.md LICENSE build64/Allium/Grout.pak/grout
# - cp -R build64/lib/* build64/Allium/Grout.pak/grout/lib/ # Come back for these libs
silent: true
package-rocknix:
desc: Package for ROCKNIX
cmds:
- rm -rf build64/ROCKNIX
- mkdir -p build64/ROCKNIX/Grout/lib
- cp scripts/ROCKNIX/Grout.sh build64/ROCKNIX/
- cp build64/grout scripts/ROCKNIX/logo.png README.md LICENSE build64/ROCKNIX/Grout/
- cp -R build64/lib/* build64/ROCKNIX/Grout/lib/
- chmod +x build64/ROCKNIX/Grout/grout build64/ROCKNIX/Grout.sh
silent: true
package-trimui:
desc: Package for Trimui
cmds:
- rm -rf build64/Trimui
- mkdir -p build64/Trimui/Grout/grout/lib
- cp scripts/Trimui/* README.md LICENSE build64/Trimui/Grout
- cp build64/grout build64/Trimui/Grout/grout
- cp -R build64/lib/* build64/Trimui/Grout/grout/lib/
- chmod +x build64/Trimui/Grout/grout/grout build64/Trimui/Grout/launch.sh
silent: true
package-batocera:
desc: Package for Batocera
cmds:
- rm -rf build64/Batocera
- mkdir -p build64/Batocera/Grout/lib
- cp scripts/Batocera/Grout.sh build64/Batocera/
- cp build64/grout README.md LICENSE build64/Batocera/Grout/
- cp -R build64/lib/* build64/Batocera/Grout/lib/
- chmod +x build64/Batocera/Grout/grout build64/Batocera/Grout.sh
silent: true
batocera-amd64:
desc: Build and package Batocera for AMD64 (x86_64 PC)
cmds:
- task: build-amd64
- task: extract-amd64
- rm -rf build/Batocera
- mkdir -p build/Batocera/Grout/lib
- cp scripts/Batocera/Grout.sh build/Batocera/
- cp build/grout README.md LICENSE build/Batocera/Grout/
- cp -R build/lib/* build/Batocera/Grout/lib/
- chmod +x build/Batocera/Grout/grout build/Batocera/Grout.sh
silent: true
all:
desc: Build and package for all platforms
cmds:
- task: build
- task: extract
- task: build-32
- task: extract-32
- task: package
silent: true
all-64:
desc: Build and package for all 64-bit platforms
cmds:
- task: build
- task: extract
- task: package-next
- task: package-muos
- task: package-knulli
- task: package-spruce
- task: package-rocknix
- task: package-trimui
silent: true
all-32:
desc: Build and package for all 32-bit platforms
cmds:
- task: build-32
- task: extract-32
- task: package-allium
silent: true
all-local:
desc: Build (with local gabagool) and package for all platforms
cmds:
- task: build-local
- task: extract
- task: build-32-local
- task: extract-32
- task: package
silent: true
adb-next:
desc: Deploy to NextUI device via ADB
cmds:
- adb shell rm -rf /mnt/SDCARD/Tools/tg5040/Grout.pak
- adb push build64/Grout.pak /mnt/SDCARD/Tools/tg5040
- adb push config-platformless.json /mnt/SDCARD/Tools/tg5040/Grout.pak/config.json
silent: true
adb-muos-sd1:
desc: Deploy to muOS device via ADB (SD1)
cmds:
- adb shell rm -rf /mnt/mmc/MUOS/application/Grout
- adb push build64/muOS/Grout /mnt/mmc/MUOS/application
- adb push config-platformless.json /mnt/mmc/MUOS/application/Grout/config.json
silent: true
adb-muos-sd2:
desc: Deploy to muOS device via ADB (SD2)
cmds:
- adb shell rm -rf /mnt/sdcard/MUOS/application/Grout
- adb push build64/muOS/Grout /mnt/sdcard/MUOS/application
- adb push config-platformless.json /mnt/sdcard/MUOS/application/Grout/config.json
silent: true
adb-knulli:
desc: Deploy to Knulli device via ADB
cmds:
- adb shell rm -rf /userdata/roms/ports/Grout
- adb push build64/Knulli/Grout /userdata/roms/ports
- adb push config-platformless.json /userdata/roms/ports/Grout/config.json
silent: true
upload-muos:
desc: Deploy to muOS device via SSH/rsync
preconditions:
- sh: test -n "$DEVICE_IP_ADDRESS"
msg: "DEVICE_IP_ADDRESS not set"
- sh: test -n "$PRIVATE_KEY_PATH" || test -n "$SSH_PASSWORD"
msg: "Set PRIVATE_KEY_PATH or SSH_PASSWORD"
vars:
SSH_OPTS: '{{if .PRIVATE_KEY_PATH}}-i {{.PRIVATE_KEY_PATH}}{{end}} -o StrictHostKeyChecking=no'
SSH_PREFIX: '{{if not .PRIVATE_KEY_PATH}}sshpass -p "{{.SSH_PASSWORD}}"{{end}}'
cmds:
- '{{.SSH_PREFIX}} ssh {{.SSH_OPTS}} root@{{.DEVICE_IP_ADDRESS}} "rm -rf /mnt/mmc/MUOS/application/Grout"'
- '{{.SSH_PREFIX}} rsync -avz --no-owner --no-group -e "ssh {{.SSH_OPTS}}" build64/muOS/Grout root@{{.DEVICE_IP_ADDRESS}}:/mnt/mmc/MUOS/application/'
# - '{{.SSH_PREFIX}} scp {{.SSH_OPTS}} config-platformless.json root@{{.DEVICE_IP_ADDRESS}}:/mnt/mmc/MUOS/application/Grout/config.json'
silent: true
i18n:
desc: Extract messages and find missing translations
cmds:
- task: i18n:extract
- task: i18n:merge
silent: true
i18n:extract:
desc: Extract i18n messages from source code
cmds:
- goi18n extract -format=toml -outdir=resources/locales .
silent: true
i18n:merge:
desc: Find missing translations for all locales
vars:
LANGS: es fr de it pt ja ru
cmds:
- mkdir -p translations_todo
- |
for lang in {{.LANGS}}; do
goi18n merge -sourceLanguage en -outdir resources/locales -format toml \
resources/locales/active.en.toml resources/locales/active.${lang}.toml
if [ -f resources/locales/translate.${lang}.toml ]; then
mv resources/locales/translate.${lang}.toml translations_todo/${lang}.toml
echo "Created translations_todo/${lang}.toml"
else
echo "No missing translations for ${lang}"
fi
done
- |
if [ -z "$(ls -A translations_todo 2>/dev/null)" ]; then
echo "All translations are complete!"
rmdir translations_todo 2>/dev/null || true
else
echo "Translation files needing work are in translations_todo/"
fi
silent: true
lint:
desc: Run Go code style checks (fmt, vet, staticcheck)
cmds:
- go fmt ./...
- go vet ./...
- staticcheck ./...
silent: true
mp4-to-webp:
desc: Convert MP4 to WebP (interactive)
interactive: true
cmds:
- |
read -p "Enter MP4 input path: " INPUT_PATH
read -p "Enter WEBP output path: " OUTPUT_PATH
[[ ! "$OUTPUT_PATH" =~ \.webp$ ]] && OUTPUT_PATH="${OUTPUT_PATH}.webp"
ffmpeg -i "$INPUT_PATH" -vcodec libwebp -filter:v fps=fps=20 -lossless 0 -compression_level 3 -q:v 70 -loop 0 -preset picture -an -vsync 0 -s 1024:768 "$OUTPUT_PATH"
resize-user-guide-images:
desc: Resize user guide images to 1024px width
dir: .github/resources/user_guide
cmds:
- for img in *.png; do sips -Z 1024 "$img" --out "$img"; done
silent: true
gen-platforms:
desc: Generate platforms.json from markdown docs
cmds:
- go run tools/gen-platforms/main.go
silent: true
clean:
desc: Remove build artifacts
cmds:
- rm -rf build64 build32
silent: true
hooks-setup:
desc: Install git hooks for development
cmds:
- git config core.hooksPath .githooks
- echo "Git hooks installed from .githooks/"
silent: true