build(docker): add docker builder
This commit is contained in:
10
.env.default
Normal file
10
.env.default
Normal 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
1
.gitignore
vendored
@@ -14,3 +14,4 @@ config.json
|
|||||||
/log
|
/log
|
||||||
/ansible/*.retry
|
/ansible/*.retry
|
||||||
.npmrc
|
.npmrc
|
||||||
|
.env
|
||||||
28
Dockerfile
Normal file
28
Dockerfile
Normal 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
9
README.md
Normal 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
22
docker-compose.yaml
Normal 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
|
||||||
23
gulpfile.js
23
gulpfile.js
@@ -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.generate = function generate() {
|
exports.setup = function setup() {
|
||||||
return new Haxe().haxelib(['run', 'protohx', 'generate', 'protohx.json']).then(({stdout}) => {
|
const builder = Project.Builder.new(
|
||||||
if (stdout.indexOf('FAIL') > -1) {
|
client.config,
|
||||||
throw stdout;
|
Project.Platform.ANDROID,
|
||||||
|
client.buildSystem,
|
||||||
|
);
|
||||||
|
return builder.prepare();
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.generate = function generate() {
|
||||||
|
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
7
scripts/build
Executable 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
32
scripts/publish
Executable 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
|
||||||
Reference in New Issue
Block a user