Merge branch 'upd/dockerfile' into 'main'

Update Dockerfile and CI

See merge request spfn/account!2
This commit is contained in:
BloxerHD 2025-11-03 07:25:19 +00:00
commit f73ef768bc
21 changed files with 792 additions and 20 deletions

View file

@ -1,25 +1,41 @@
image: docker:latest
default:
image: docker:28.5.1-dind
services:
- "docker:28.5.1-dind"
variables:
IMAGE_NAME: "ci.perditum.com/perditum/account-rs"
DOCKER_TLS_CERTDIR: "/certs"
IMAGE_TAG: "${CI_COMMIT_REF_SLUG}"
before_script:
- git submodule update --init
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" ci.perditum.com
stages:
- build
- test
- build-and-push-image
- push-retagged-latest
build_and_push:
stage: build
test:
stage: test
image: rust:alpine3.22
script:
- apk add --no-cache musl-dev openssl-dev openssl-libs-static protobuf-dev lld git
- git submodule update --init
- cargo test
build-and-push-image:
stage: build-and-push-image
script:
- echo "DATABASE_URL=$DATABASE_URL" > .env
- docker build -t "$IMAGE_NAME:$IMAGE_TAG" .
- |
if [ "$CI_COMMIT_REF_NAME" = "main" ]; then
docker tag "$IMAGE_NAME:$IMAGE_TAG" "$IMAGE_NAME:latest"
docker push "$IMAGE_NAME:latest"
else
echo "skipping push"
fi
- git submodule update --init
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t "$CI_REGISTRY_IMAGE:$IMAGE_TAG" .
- docker push "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
push-retagged-latest:
stage: push-retagged-latest
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker pull "$CI_REGISTRY_IMAGE:$IMAGE_TAG"
- docker tag "$CI_REGISTRY_IMAGE:$IMAGE_TAG" "$CI_REGISTRY_IMAGE:latest"
- docker push "$CI_REGISTRY_IMAGE:latest"
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
when: on_success

View file

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "SELECT EXISTS(SELECT 1 FROM users WHERE username = $1 ) as exists",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
null
]
},
"hash": "08c4a5721982ecd267ebc515b866c61aaef9395170430a58dcd7ac78f8cc75b2"
}

View file

@ -0,0 +1,15 @@
{
"db_name": "PostgreSQL",
"query": "UPDATE users SET email_verified_since = $1 WHERE pid = $2",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Timestamp",
"Int4"
]
},
"nullable": []
},
"hash": "248fc3dbfadb793f1f380486d9c1c95230d4d5a7ee3cb66d9382b7f0522c5e82"
}

View file

@ -0,0 +1,20 @@
{
"db_name": "PostgreSQL",
"query": "SELECT nextval('pid_counter') as pid",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int8"
}
],
"parameters": {
"Left": []
},
"nullable": [
null
]
},
"hash": "3c9b1695f8ae49e4308c048de98c1c262351465b6f102e98912f67442a1f54d9"
}

View file

@ -0,0 +1,54 @@
{
"db_name": "PostgreSQL",
"query": "select * from tokens where pid = $1 and token_id = $2 and random = $3",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "token_id",
"type_info": "Int8"
},
{
"ordinal": 2,
"name": "token_type",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "random",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "title_id",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "expires",
"type_info": "Timestamp"
}
],
"parameters": {
"Left": [
"Int4",
"Int8",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
true,
false
]
},
"hash": "48710e0b87742cc3fef816b3c95604095f71324011e7093ec37af15da8c158f4"
}

View file

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "select pid, username from users where username = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "username",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false
]
},
"hash": "566221b869f293e6c721e2e8bbf3087943e5816a98cdce151302055c58bd1183"
}

View file

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "select address, port from nex_servers where game_server_id = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "address",
"type_info": "Inet"
},
{
"ordinal": 1,
"name": "port",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false
]
},
"hash": "5bd26d4c9e701bde77ce598fea2ce0b98ea2c7de03e71ac704c3ba047162c0b2"
}

View file

@ -0,0 +1,130 @@
{
"db_name": "PostgreSQL",
"query": "SELECT * FROM users WHERE username = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "username",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "password",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "birthdate",
"type_info": "Date"
},
{
"ordinal": 4,
"name": "timezone",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "email",
"type_info": "Varchar"
},
{
"ordinal": 6,
"name": "email_verified_since",
"type_info": "Timestamp"
},
{
"ordinal": 7,
"name": "country",
"type_info": "Varchar"
},
{
"ordinal": 8,
"name": "language",
"type_info": "Varchar"
},
{
"ordinal": 9,
"name": "gender",
"type_info": "Bpchar"
},
{
"ordinal": 10,
"name": "marketing_allowed",
"type_info": "Bool"
},
{
"ordinal": 11,
"name": "off_device_allowed",
"type_info": "Bool"
},
{
"ordinal": 12,
"name": "region",
"type_info": "Int4"
},
{
"ordinal": 13,
"name": "mii_data",
"type_info": "Varchar"
},
{
"ordinal": 14,
"name": "account_level",
"type_info": "Int4"
},
{
"ordinal": 15,
"name": "creation_date",
"type_info": "Timestamp"
},
{
"ordinal": 16,
"name": "updated",
"type_info": "Timestamp"
},
{
"ordinal": 17,
"name": "nex_password",
"type_info": "Varchar"
},
{
"ordinal": 18,
"name": "verification_code",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "606364c79e0990deb07dfbe6c32b3d302d083ec5333f3a5ce04113c38a041100"
}

View file

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "select nex_password from users where pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "nex_password",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false
]
},
"hash": "6c1df0b05553305ba847f571a5859bf11353f28c25e4f81268e9379b5b2cb375"
}

View file

@ -0,0 +1,46 @@
{
"db_name": "PostgreSQL",
"query": "SELECT pid, username, account_level, nex_password, mii_data FROM users WHERE username = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "username",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "account_level",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "nex_password",
"type_info": "Varchar"
},
{
"ordinal": 4,
"name": "mii_data",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Text"
]
},
"nullable": [
false,
false,
false,
false,
false
]
},
"hash": "6de07eba2f12b15f541d129b83664a272a0d3ac9e929e70b399582fa3f14166d"
}

View file

@ -0,0 +1,130 @@
{
"db_name": "PostgreSQL",
"query": "SELECT * FROM users WHERE pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "username",
"type_info": "Varchar"
},
{
"ordinal": 2,
"name": "password",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "birthdate",
"type_info": "Date"
},
{
"ordinal": 4,
"name": "timezone",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "email",
"type_info": "Varchar"
},
{
"ordinal": 6,
"name": "email_verified_since",
"type_info": "Timestamp"
},
{
"ordinal": 7,
"name": "country",
"type_info": "Varchar"
},
{
"ordinal": 8,
"name": "language",
"type_info": "Varchar"
},
{
"ordinal": 9,
"name": "gender",
"type_info": "Bpchar"
},
{
"ordinal": 10,
"name": "marketing_allowed",
"type_info": "Bool"
},
{
"ordinal": 11,
"name": "off_device_allowed",
"type_info": "Bool"
},
{
"ordinal": 12,
"name": "region",
"type_info": "Int4"
},
{
"ordinal": 13,
"name": "mii_data",
"type_info": "Varchar"
},
{
"ordinal": 14,
"name": "account_level",
"type_info": "Int4"
},
{
"ordinal": 15,
"name": "creation_date",
"type_info": "Timestamp"
},
{
"ordinal": 16,
"name": "updated",
"type_info": "Timestamp"
},
{
"ordinal": 17,
"name": "nex_password",
"type_info": "Varchar"
},
{
"ordinal": 18,
"name": "verification_code",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
false,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false
]
},
"hash": "93960465bbf8f670891d49b95fc52257c0ef596eee2d9a0e6a7d0aad03de4421"
}

View file

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "\n INSERT INTO users (\n pid,\n username,\n password,\n birthdate,\n timezone,\n email,\n country,\n language,\n marketing_allowed,\n off_device_allowed,\n region,\n gender,\n mii_data,\n verification_code,\n account_level\n ) VALUES (\n $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15\n )\n ",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Int4",
"Varchar",
"Varchar",
"Date",
"Varchar",
"Varchar",
"Varchar",
"Varchar",
"Bool",
"Bool",
"Int4",
"Bpchar",
"Varchar",
"Int4",
"Int4"
]
},
"nullable": []
},
"hash": "9a1d44d33c05841f52e56f57a0124d6ed4262f4c01ce9708aad88963e8b083b7"
}

View file

@ -0,0 +1,54 @@
{
"db_name": "PostgreSQL",
"query": "select * from tokens where pid = $1 and token_id = $2 and random =$3",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "token_id",
"type_info": "Int8"
},
{
"ordinal": 2,
"name": "token_type",
"type_info": "Int4"
},
{
"ordinal": 3,
"name": "random",
"type_info": "Int4"
},
{
"ordinal": 4,
"name": "title_id",
"type_info": "Varchar"
},
{
"ordinal": 5,
"name": "expires",
"type_info": "Timestamp"
}
],
"parameters": {
"Left": [
"Int4",
"Int8",
"Int4"
]
},
"nullable": [
false,
false,
false,
false,
true,
false
]
},
"hash": "9d3cee43a86cead9a6d078abc1266fc2a97ac6e25a9733d1d20faf555c67abe1"
}

View file

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "SELECT mii_data from users where pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "mii_data",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false
]
},
"hash": "a79a3023d5b42b16304a48d36066ba3c9d2458d6bad32b9aac7deb718969dc07"
}

View file

@ -0,0 +1,15 @@
{
"db_name": "PostgreSQL",
"query": "UPDATE users SET mii_data = $1 WHERE pid = $2",
"describe": {
"columns": [],
"parameters": {
"Left": [
"Varchar",
"Int4"
]
},
"nullable": []
},
"hash": "b08800e65b5b8a788e5a5d2f2036bce05bcd8c74c0b5077d786e35ee290447a2"
}

View file

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "SELECT verification_code FROM users WHERE pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "verification_code",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false
]
},
"hash": "b16ba4b6c1b7d1c207e94515268c3bbd90d4bcf92d20203cba5afb2664f4bb8a"
}

View file

@ -0,0 +1,22 @@
{
"db_name": "PostgreSQL",
"query": "SELECT EXISTS(select 1 from users where pid = $1)",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "exists",
"type_info": "Bool"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
null
]
},
"hash": "c8d50662530cac49c4261fb321cd15f9e4bafdfca12d2130a873d44a88dd435b"
}

View file

@ -0,0 +1,40 @@
{
"db_name": "PostgreSQL",
"query": "SELECT username, account_level, nex_password, mii_data FROM users WHERE pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "username",
"type_info": "Varchar"
},
{
"ordinal": 1,
"name": "account_level",
"type_info": "Int4"
},
{
"ordinal": 2,
"name": "nex_password",
"type_info": "Varchar"
},
{
"ordinal": 3,
"name": "mii_data",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false,
false,
false,
false
]
},
"hash": "d8a0ba20ad0db4ba8821964944b00dd589cdd9cd0ac91c27edf3f79ba4174a18"
}

View file

@ -0,0 +1,30 @@
{
"db_name": "PostgreSQL",
"query": "insert into tokens (token_type, pid, title_id)\n values ($1, $2, $3) returning token_id, random",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "token_id",
"type_info": "Int8"
},
{
"ordinal": 1,
"name": "random",
"type_info": "Int4"
}
],
"parameters": {
"Left": [
"Int4",
"Int4",
"Varchar"
]
},
"nullable": [
false,
false
]
},
"hash": "e5a2f7f28c3d7b9524d3dce48a9e47d6180ff634ebf59f3a1efd92b797170ac2"
}

View file

@ -0,0 +1,28 @@
{
"db_name": "PostgreSQL",
"query": "select pid, username from users where pid = $1",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "pid",
"type_info": "Int4"
},
{
"ordinal": 1,
"name": "username",
"type_info": "Varchar"
}
],
"parameters": {
"Left": [
"Int4"
]
},
"nullable": [
false,
false
]
},
"hash": "eafa97669e8ec04f1dc0a8e05d417f12ffeeb26a5eabca323abfed0e1d7bcbea"
}

View file

@ -13,9 +13,9 @@ RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo fetch
COPY . .
RUN OPENSSL_LIB_DIR=/usr/lib OPENSSL_INCLUDE_DIR=/usr/include/openssl OPENSSL_STATIC=1 RUSTFLAGS="-C target-feature=+aes,+sse -C relocation-model=static -C linker=ld.lld" cargo build --profile prod --target x86_64-unknown-linux-musl
ENV SQLX_OFFLINE=true
RUN rm .env
RUN OPENSSL_LIB_DIR=/usr/lib OPENSSL_INCLUDE_DIR=/usr/include/openssl OPENSSL_STATIC=1 RUSTFLAGS="-C target-feature=+aes,+sse -C relocation-model=static -C linker=ld.lld" cargo build --profile prod --target x86_64-unknown-linux-musl
FROM scratch AS final