build(docker): add docker builder

This commit is contained in:
2026-04-06 14:26:15 +03:00
parent 03d6e1f822
commit 27120bbed5
8 changed files with 127 additions and 5 deletions

10
.env.default Normal file
View File

@@ -0,0 +1,10 @@
PROJECT=tankz
SDK_PATH=$HOME/sdk
PUBLISH_PATH=$HOME/public/$PROJECT
BUILD_PATH=./build
TARGET_PATH=./target
KEY_STORE=<keystore.jks>
KEY_PASS=<passphrase>
REPO=https://git.shmyga.ru/api/packages/InfernalGames
PUBLISH_USER=<username>
PUBLISH_PASSWORD=<passphrase>

1
.gitignore vendored
View File

@@ -14,3 +14,4 @@ config.json
/log
/ansible/*.retry
.npmrc
.env

28
Dockerfile Normal file
View File

@@ -0,0 +1,28 @@
FROM ubuntu:noble AS base
RUN apt update && apt install -y \
nodejs \
npm \
openjdk-11-jre \
protobuf-compiler \
jq
RUN node -v
RUN npm -v
FROM base AS builder
ENV GRADLE_USER_HOME=/sdk/gradle
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY gulpfile.js protohx.json ./
COPY tasks ./tasks
COPY config.example.json ./config.example.json
RUN --mount=type=secret,id=KEY_STORE \
cat /run/secrets/KEY_STORE > ./key.jks
RUN --mount=type=secret,id=KEY_PASS,env=KEY_PASS \
jq --arg key_pass "$KEY_PASS" \
'.SdkDir = "/sdk" | .PublishDir = "/app/publish" | .Key.store = "key.jks" | .Key.pass = $key_pass' \
config.example.json > config.json
COPY src ./src
#COPY dependencies ./dependencies
VOLUME ["/sdk", "/app/build", "/app/target", "/app/publish", "/app/src-gen"]
CMD ["npx", "gulp", "default"]

9
README.md Normal file
View File

@@ -0,0 +1,9 @@
# Tankz
## Play
https://shmyga.ru/tankz/html5/index.html
## Packages
https://git.shmyga.ru/InfernalGames/-/packages/generic/tankz

22
docker-compose.yaml Normal file
View File

@@ -0,0 +1,22 @@
name: $PROJECT
services:
builder:
container_name: $PROJECT-builder
image: infernal-games/$PROJECT-builder
build:
context: .
secrets:
- KEY_STORE
- KEY_PASS
volumes:
- ${SDK_PATH}:/sdk
- ${BUILD_PATH}:/app/build
- ${TARGET_PATH}:/app/target
- ${PUBLISH_PATH}:/app/publish
- ./src-gen:/app/src-gen
secrets:
KEY_STORE:
file: $KEY_STORE
KEY_PASS:
environment: KEY_PASS

View File

@@ -23,12 +23,25 @@ exports.clean = function clean() {
return gulp.src('target/*', {read: false}).pipe(gulpClean());
};
exports.setup = function setup() {
const builder = Project.Builder.new(
client.config,
Project.Platform.ANDROID,
client.buildSystem,
);
return builder.prepare();
};
exports.generate = function generate() {
return new Haxe().haxelib(['run', 'protohx', 'generate', 'protohx.json']).then(({stdout}) => {
if (stdout.indexOf('FAIL') > -1) {
return exports.setup().then(() =>
new Haxe()
.haxelib(["run", "protohx", "generate", "protohx.json"])
.then(({ stdout }) => {
if (stdout.indexOf("FAIL") > -1) {
throw stdout;
}
});
}),
);
};
/**

7
scripts/build Executable file
View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -e
cd "$(dirname $(dirname "$0"))" || exit
source .env
mkdir -p "$SDK_PATH" "$PUBLISH_PATH" "$BUILD_PATH" "$TARGET_PATH" "src-gen"
docker compose run --rm --user $(id -u):$(id -g) --build --remove-orphans builder

32
scripts/publish Executable file
View File

@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -e
cd "$(dirname $(dirname "$0"))" || exit
source .env
VERSION=$(grep -m 1 'version' ./package.json | grep -oP '"version"\s*:\s*"\K\d+\.\d+\.\d+')
curl --user "${PUBLISH_USER}:${PUBLISH_PASSWORD}" -X DELETE \
"${REPO}/generic/${PROJECT}/${VERSION}"
PACKAGES=(
"android/${PROJECT}_${VERSION}.apk"
"debian/${PROJECT}_${VERSION}_all.deb"
"archive/${PROJECT}_${VERSION}_linux.tar.gz"
)
for PACKAGE in "${PACKAGES[@]}"
do
PACKAGE_NAME=$(basename "$PACKAGE")
echo "publish: $PACKAGE"
curl --user "${PUBLISH_USER}:${PUBLISH_PASSWORD}" \
--upload-file "${PUBLISH_PATH}/${PACKAGE}" \
"${REPO}/generic/${PROJECT}/${VERSION}/${PACKAGE_NAME}"
if [[ "$PACKAGE" == *.deb ]]; then
curl --user "${PUBLISH_USER}:${PUBLISH_PASSWORD}" -X DELETE \
"${REPO}/debian/pool/noble/main/${PROJECT}/${VERSION}/all"
curl --user "${PUBLISH_USER}:${PUBLISH_PASSWORD}" \
--upload-file "${PUBLISH_PATH}/${PACKAGE}" \
"${REPO}/debian/pool/noble/main/upload"
fi
done