2 Commits

Author SHA1 Message Date
a2e9d16be9 build(docker): add docker web image build 2026-04-10 14:00:08 +03:00
c95bb70369 build(docker): add docker builder 2026-04-08 16:55:52 +03:00
9 changed files with 194 additions and 5 deletions

21
.env.default Normal file
View File

@@ -0,0 +1,21 @@
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>
DOCKER_REPO=git.shmyga.ru
DOCKER_GROUP=infernalgames
DOCKER_ROOT="$DOCKER_REPO/$DOCKER_GROUP"
VERSION=$(grep -m 1 'version' ./package.json | grep -oP '"version"\s*:\s*"\K\d+\.\d+.\d+')
DOCKER_PROJECTS=(
"$PROJECT-web:web"
)
DOCKER_ARGS=(
"PROJECT_NAME=$PROJECT"
)

1
.gitignore vendored
View File

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

35
Dockerfile Normal file
View File

@@ -0,0 +1,35 @@
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"]
FROM hello-world AS web
ARG PROJECT_NAME
VOLUME ["/app/${PROJECT_NAME}"]
COPY ./target/client/html5 /app/${PROJECT_NAME}/html5
COPY ./target/client/flash /app/${PROJECT_NAME}/flash
CMD ["/hello"]

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

23
docker-compose.yaml Normal file
View File

@@ -0,0 +1,23 @@
name: $PROJECT
services:
builder:
container_name: $PROJECT-builder
image: infernal-games/$PROJECT-builder
build:
context: .
target: builder
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()); 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() { exports.generate = function generate() {
return new Haxe().haxelib(['run', 'protohx', 'generate', 'protohx.json']).then(({stdout}) => { return exports.setup().then(() =>
if (stdout.indexOf('FAIL') > -1) { new Haxe()
.haxelib(["run", "protohx", "generate", "protohx.json"])
.then(({ stdout }) => {
if (stdout.indexOf("FAIL") > -1) {
throw stdout; 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

45
scripts/docker-action Executable file
View File

@@ -0,0 +1,45 @@
#!/usr/bin/env bash
set -e
cd "$(dirname $(dirname "$0"))" || exit
. .env
build () {
echo "build: $1"
. "$1/.env"
for PROJECT in "${DOCKER_PROJECTS[@]}"; do
IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT"
ARGS=("build")
for ARG in ${DOCKER_ARGS[@]}; do
ARGS+=("--build-arg" "$ARG")
done
if [ -n "$PROJECT_TARGET" ]; then
ARGS+=("--target" "$PROJECT_TARGET")
fi
ARGS+=("-t" "$DOCKER_GROUP/$PROJECT_NAME" ".")
ARGS+=("-f" "$1/Dockerfile")
echo "${ARGS[@]}"
docker "${ARGS[@]}"
done
}
publish () {
echo "publish: $1"
. "$1/.env"
for PROJECT in "${DOCKER_PROJECTS[@]}"; do
IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT"
docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:$VERSION
docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:latest
docker push $DOCKER_ROOT/$PROJECT_NAME:$VERSION
docker push $DOCKER_ROOT/$PROJECT_NAME:latest
done
}
DEFAULT_TARGETS="."
TARGETS="${@-$DEFAULT_TARGETS}"
DOCKER_ACTION="${DOCKER_ACTION-build}"
for TARGET in $TARGETS; do
$DOCKER_ACTION "$TARGET"
done

35
scripts/publish Executable file
View File

@@ -0,0 +1,35 @@
#!/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+')
PACKAGES=(
"android/${PROJECT}_${VERSION}.apk"
"debian/${PROJECT}_${VERSION}_all.deb"
"archive/${PROJECT}_${VERSION}_linux.tar.gz"
"archive/${PROJECT}_${VERSION}_win.zip"
"installer/${PROJECT}_${VERSION}.exe"
)
for PACKAGE in "${PACKAGES[@]}"
do
if [ -f "${PUBLISH_PATH}/${PACKAGE}" ]; then
PACKAGE_NAME=$(basename "$PACKAGE")
echo "publish: $PACKAGE"
curl --user "${PUBLISH_USER}:${PUBLISH_PASSWORD}" -X DELETE \
"${REPO}/generic/${PROJECT}/${VERSION}/${PACKAGE_NAME}"
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
fi
done