mirror of
https://github.com/rommapp/grout.git
synced 2026-04-23 06:54:36 +00:00
356 lines
12 KiB
YAML
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
|