Skip to content

Commit 9c1def7

Browse files
committed
Build with GitLab CI
1 parent f568ca8 commit 9c1def7

File tree

6 files changed

+229
-17
lines changed

6 files changed

+229
-17
lines changed

.gitlab-ci.yml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
stages:
2+
- prepare
3+
- build
4+
- package
5+
- upload
6+
- release
7+
8+
variables:
9+
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/mtasa-blue"
10+
OUTPUT_DIR: "Bin/server"
11+
BUILD_OVERRIDES: Shared/build_overrides.h
12+
NUM_CORES: 6
13+
14+
include:
15+
- local: .steps.gitlab-ci.yml
16+
inputs:
17+
tag: latest
18+
- local: .steps.gitlab-ci.yml
19+
inputs:
20+
tag: i386
21+
- local: .steps.gitlab-ci.yml
22+
inputs:
23+
tag: arm64
24+
- local: .steps.gitlab-ci.yml
25+
inputs:
26+
tag: armhf
27+
28+
release:
29+
stage: release
30+
image: registry.gitlab.com/gitlab-org/release-cli:latest
31+
dependencies:
32+
- upload [latest]
33+
- upload [i386]
34+
- upload [arm64]
35+
- upload [armhf]
36+
variables:
37+
GIT_STRATEGY: none
38+
script:
39+
- ASSETS="[$(cat assets/* | sed '/^$/d' | tr '\n' ',' | sed 's/,$//')]"
40+
- >-
41+
release-cli create
42+
--name "release-${CI_PIPELINE_IID}"
43+
--tag-name "release-${CI_PIPELINE_IID}"
44+
--assets-link "${ASSETS}"
45+
rules:
46+
- if: $CI_COMMIT_BRANCH

.steps.gitlab-ci.yml

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
spec:
2+
inputs:
3+
tag:
4+
type: string
5+
options:
6+
- latest
7+
- i386
8+
- arm64
9+
- armhf
10+
---
11+
prepare [$[[ inputs.tag ]]]:
12+
stage: prepare
13+
image: ${CI_REGISTRY_IMAGE}/build:$[[ inputs.tag ]]
14+
artifacts:
15+
paths:
16+
- $OUTPUT_DIR
17+
reports:
18+
dotenv: .env
19+
variables:
20+
LATEST_URL_TEMPLATE: https://nightly.multitheftauto.com/?multitheftauto_linuxNIGHTLY_SUFFIX-1.6-latest
21+
GIT_STRATEGY: none
22+
before_script:
23+
- >-
24+
if [[ "$[[ inputs.tag ]]" == "latest" ]]; then
25+
NIGHTLY_SUFFIX="_x64"
26+
elif [[ "$[[ inputs.tag ]]" == "i386" ]]; then
27+
NIGHTLY_SUFFIX=""
28+
elif [[ "$[[ inputs.tag ]]" == "arm64" ]]; then
29+
NIGHTLY_SUFFIX="_arm64"
30+
elif [[ "$[[ inputs.tag ]]" == "armhf" ]]; then
31+
NIGHTLY_SUFFIX="_arm"
32+
else
33+
echo "Unknown image tag: $[[ inputs.tag ]]"
34+
exit 1
35+
fi
36+
- LATEST_URL=${LATEST_URL_TEMPLATE/NIGHTLY_SUFFIX/$NIGHTLY_SUFFIX}
37+
script:
38+
- set -e
39+
- wget --quiet --content-disposition "$LATEST_URL"
40+
- FILENAME=$(ls multitheftauto_linux* | head -n 1)
41+
- test -f "${FILENAME}"
42+
- tar xvaf "${FILENAME}" --strip-components=1 --one-top-level="${OUTPUT_DIR}" --wildcards "*/net.so"
43+
- VER=${FILENAME#*-}
44+
- VER=${VER/-*}
45+
- REV=${FILENAME#*-full_rc-}
46+
- REV=${REV#*-rc-}
47+
- REV=${REV%-*}
48+
- REV=${REV%%.*}
49+
- echo "PACKAGE=${FILENAME/.tar*}" >> .env
50+
- echo "NET_VERSION=$VER" >> .env
51+
- echo "NET_REVISION=$REV" >> .env
52+
tags:
53+
- platform:linux/amd64
54+
rules:
55+
- if: $CI_COMMIT_BRANCH
56+
57+
build [$[[ inputs.tag ]]]:
58+
stage: build
59+
image: ${CI_REGISTRY_IMAGE}/build:$[[ inputs.tag ]]
60+
needs:
61+
- prepare [$[[ inputs.tag ]]]
62+
artifacts:
63+
paths:
64+
- $OUTPUT_DIR
65+
before_script:
66+
- |
67+
cat > "Shared/build_overrides.h" <<EOF
68+
#undef MTASA_VERSION_TYPE
69+
#undef MTASA_VERSION_BUILD
70+
#define MTASA_VERSION_TYPE VERSION_TYPE_RELEASE
71+
#define MTASA_VERSION_BUILD $NET_REVISION
72+
EOF
73+
script:
74+
- ./linux-build.sh
75+
- cp Server/output/* "$OUTPUT_DIR"
76+
tags:
77+
- platform:linux/amd64
78+
rules:
79+
- if: $CI_COMMIT_BRANCH
80+
81+
package [$[[ inputs.tag ]]]:
82+
stage: package
83+
image: ${CI_REGISTRY_IMAGE}/build:$[[ inputs.tag ]]
84+
needs:
85+
- prepare [$[[ inputs.tag ]]]
86+
- build [$[[ inputs.tag ]]]
87+
artifacts:
88+
paths:
89+
- packages
90+
reports:
91+
dotenv: .env
92+
variables:
93+
GIT_STRATEGY: none
94+
script:
95+
- echo "NET_VERSION=$NET_VERSION" >> .env
96+
- echo "NET_REVISION=$NET_REVISION" >> .env
97+
- cd "$OUTPUT_DIR"
98+
- find . -type f -name "*.so" -exec chmod -x "{}" \;
99+
- mkdir -p mods/deathmatch
100+
- cd "$CI_PROJECT_DIR"
101+
- mv "$OUTPUT_DIR" "${PACKAGE}"
102+
- mkdir -p packages
103+
- tar --owner=0 --group=0 -cvaf "packages/${PACKAGE}.tar.gz" "${PACKAGE}"
104+
- tar --owner=0 --group=0 -cvaf "packages/${PACKAGE}.tar.xz" "${PACKAGE}"
105+
tags:
106+
- platform:linux/amd64
107+
rules:
108+
- if: $CI_COMMIT_BRANCH
109+
110+
upload [$[[ inputs.tag ]]]:
111+
stage: upload
112+
image: curlimages/curl:latest
113+
needs:
114+
- package [$[[ inputs.tag ]]]
115+
variables:
116+
GIT_STRATEGY: none
117+
artifacts:
118+
paths:
119+
- assets
120+
script:
121+
- mkdir -p assets
122+
- cd packages
123+
- |
124+
for package in *; do
125+
package_url="${PACKAGE_REGISTRY_URL}/${NET_VERSION}-r${NET_REVISION}-${CI_PIPELINE_IID}/${package}"
126+
curl \
127+
--header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
128+
--upload-file "${package}" \
129+
"${package_url}"
130+
echo "{\"name\":\"${package}\",\"direct_asset_path\":\"/${package/-*}.tar.${package##*.}\",\"url\":\"${package_url}\",\"link_type\":\"package\"}" > "${CI_PROJECT_DIR}/assets/${package}.json"
131+
done
132+
rules:
133+
- if: $CI_COMMIT_BRANCH

Dockerfile.combined

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ENV AR=x86_64-linux-gnu-gcc-ar-10 \
3535
CXX=x86_64-linux-gnu-g++-10 \
3636
GLIBC_COMPAT=true
3737

38-
COPY utils/compat/glibc_version.h /compat/
38+
COPY utils/docker/compat/glibc_version.h /compat/
3939

4040
####################################################################################################
4141

@@ -51,13 +51,16 @@ RUN sed -i 's/deb http/deb \[arch=amd64,i386\] http/' /etc/apt/sources.list && \
5151
g++-10-multilib \
5252
gcc-10-multilib \
5353
libmysqlclient-dev:i386 \
54+
libmysqlclient21:i386 \
5455
libncurses-dev:i386 \
5556
libncursesw6:i386 \
57+
libssl-dev:i386 \
58+
zlib1g-dev:i386 \
5659
&& \
5760
apt-get clean && \
5861
rm -rf /var/lib/apt/lists/*
5962

60-
COPY utils/compat/glibc_version_x86.redef /compat/glibc_version.redef
63+
COPY utils/docker/compat/glibc_version_x86.redef /compat/glibc_version.redef
6164
RUN mkdir -p /compat/x86 && \
6265
objcopy --redefine-syms=/compat/glibc_version.redef "$($CC -m32 --print-file-name=libstdc++.a)" /compat/x86/libstdc++.a && \
6366
objcopy --redefine-syms=/compat/glibc_version.redef "$($CC -m32 --print-file-name=libmysqlclient.a)" /compat/x86/libmysqlclient.a
@@ -74,13 +77,16 @@ RUN sed -i 's/deb http/deb \[arch=amd64\] http/' /etc/apt/sources.list && \
7477
g++-10 \
7578
gcc-10 \
7679
libmysqlclient-dev \
80+
libmysqlclient21 \
7781
libncurses-dev \
7882
libncursesw6 \
83+
libssl-dev \
84+
zlib1g-dev \
7985
&& \
8086
apt-get clean && \
8187
rm -rf /var/lib/apt/lists/*
8288

83-
COPY utils/compat/glibc_version_x64.redef /compat/glibc_version.redef
89+
COPY utils/docker/compat/glibc_version_x64.redef /compat/glibc_version.redef
8490
RUN mkdir -p /compat/x64 && \
8591
objcopy --redefine-syms=/compat/glibc_version.redef "$($CC --print-file-name=libstdc++.a)" /compat/x64/libstdc++.a && \
8692
objcopy --redefine-syms=/compat/glibc_version.redef "$($CC --print-file-name=libmysqlclient.a)" /compat/x64/libmysqlclient.a
@@ -113,8 +119,11 @@ RUN sed -i 's/deb http/deb \[arch=armhf\] http/' /etc/apt/sources.list.d/ubuntu-
113119
gcc-10-i686-linux-gnu \
114120
libc6-dev:i386 \
115121
libmysqlclient-dev:armhf \
122+
libmysqlclient21:armhf \
116123
libncurses-dev:armhf \
117124
libncursesw6:armhf \
125+
libssl-dev:armhf \
126+
zlib1g-dev:armhf \
118127
&& \
119128
apt-get clean && \
120129
rm -rf /var/lib/apt/lists/*
@@ -134,12 +143,16 @@ RUN sed -i 's/deb http/deb \[arch=arm64\] http/' /etc/apt/sources.list.d/ubuntu-
134143
dpkg --add-architecture arm64 && \
135144
apt-get update && \
136145
apt-get install -y --no-install-recommends \
146+
g++-10 \
137147
g++-10-aarch64-linux-gnu \
138148
gcc-10 \
139149
gcc-10-aarch64-linux-gnu \
140150
libmysqlclient-dev:arm64 \
151+
libmysqlclient21:arm64 \
141152
libncurses-dev:arm64 \
142153
libncursesw6:arm64 \
154+
libssl-dev:arm64 \
155+
zlib1g-dev:arm64 \
143156
&& \
144157
apt-get clean && \
145158
rm -rf /var/lib/apt/lists/*

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
## What this fork is about
66

7-
This is a fork of [multitheftauto/mtasa-blue](https://github.com/multitheftauto/mtasa-blue/) using LuaJIT 2.1 instead of Lua 5.1. Builds can be found [here](https://nightly.mtasa.hu).
7+
This is a fork of [multitheftauto/mtasa-blue](https://github.com/multitheftauto/mtasa-blue/) using LuaJIT 2.1 instead of Lua 5.1. Builds can be found [here](https://oaklab.hu/crys/mtasa-blue/-/releases).
88

99
## License
1010

linux-build.sh

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,20 @@ else
1313
PREMAKE5=utils/premake5
1414
fi
1515

16-
# Number of cores
1716
if [ "$(uname)" == "Darwin" ]; then
18-
NUM_CORES=$(sysctl -n hw.ncpu)
1917
: ${GCC_PREFIX:=}
2018
: ${AR:=ar}
2119
: ${CC:=gcc}
2220
: ${CXX:=g++}
23-
else
24-
NUM_CORES=$(grep -c ^processor /proc/cpuinfo)
21+
fi
22+
23+
# Number of cores
24+
if [[ -z "$NUM_CORES" ]]; then
25+
if [ "$(uname)" == "Darwin" ]; then
26+
NUM_CORES=$(sysctl -n hw.ncpu)
27+
else
28+
NUM_CORES=$(grep -c ^processor /proc/cpuinfo)
29+
fi
2530
fi
2631

2732
# Read script arguments
@@ -55,14 +60,12 @@ esac
5560
case $BUILD_ARCHITECTURE in
5661
32|x86)
5762
CONFIG=${BUILD_CONFIG}_x86
58-
: ${GCC_PREFIX:=i386-linux-gnu-}
59-
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
60-
: ${CC:=x86_64-linux-gnu-gcc-10}
61-
: ${CXX:=x86_64-linux-gnu-g++-10}
63+
: "${AR:=x86_64-linux-gnu-gcc-ar-10}"
64+
: "${CC:=x86_64-linux-gnu-gcc-10}"
65+
: "${CXX:=x86_64-linux-gnu-g++-10}"
6266
;;
6367
64|x64)
6468
CONFIG=${BUILD_CONFIG}_x64
65-
: ${GCC_PREFIX:=x86_64-linux-gnu-}
6669
: ${AR:=x86_64-linux-gnu-gcc-ar-10}
6770
: ${CC:=x86_64-linux-gnu-gcc-10}
6871
: ${CXX:=x86_64-linux-gnu-g++-10}
@@ -104,4 +107,4 @@ else
104107
fi
105108

106109
# Build!
107-
make -C Build/ -j ${NUM_CORES} AR=${AR} CC=${CC} CXX=${CXX} config=${CONFIG} all
110+
make -C Build/ -j ${NUM_CORES} AR=${AR} CC=${CC} CXX=${CXX} config=${CONFIG}

vendor/luajit/premake5.lua

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,23 @@
1+
local luajit_make = "@+${MAKE} -C ../vendor/luajit BUILDMODE=static XCFLAGS=-fPIC TARGET_T=libluajit.a"
2+
if os.getenv("LUAJIT_CC") then
3+
luajit_make = luajit_make .. " CC=\"" .. os.getenv("LUAJIT_CC") .. "\""
4+
end
5+
if os.getenv("LUAJIT_HOST_CC") then
6+
luajit_make = luajit_make .. " HOST_CC=\"" .. os.getenv("LUAJIT_HOST_CC") .. "\""
7+
end
8+
if _OPTIONS["gccprefix"] then
9+
luajit_make = luajit_make .. " CROSS=\"" .. _OPTIONS["gccprefix"] .. "\""
10+
end
11+
112
project "LuaJIT"
213
kind "Makefile"
314

4-
buildcommands { "cd ../vendor/luajit && make clean && make" }
5-
rebuildcommands { "cd ../vendor/luajit && make clean && make" }
6-
cleancommands { "cd ../vendor/luajit && make clean" }
15+
buildcommands {
16+
luajit_make .. " clean",
17+
luajit_make
18+
}
19+
rebuildcommands {
20+
luajit_make .. " clean",
21+
luajit_make
22+
}
23+
cleancommands { luajit_make .. " clean" }

0 commit comments

Comments
 (0)