Skip to content

Commit d508b28

Browse files
authored
refactor: bash scripts (estkme-group#123)
1 parent f5956dd commit d508b28

File tree

5 files changed

+129
-107
lines changed

5 files changed

+129
-107
lines changed

.github/workflows/build.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
name: Build for ${{ matrix.build.name }}
1414
runs-on: ${{ matrix.os }}
1515
strategy:
16-
fail-fast: false
16+
fail-fast: false
1717
matrix:
1818
os: [ubuntu-latest]
1919
build:
@@ -29,7 +29,7 @@ jobs:
2929
uses: actions/checkout@v4
3030

3131
- name: Setup Toolchain
32-
run: ./scripts/setup-debian.sh
32+
run: sudo ./scripts/setup-debian.sh ${{ matrix.build.variant }}
3333
if: runner.os == 'Linux'
3434

3535
- name: Build for ${{ matrix.build.name }}

scripts/build-ci.sh

Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,25 @@
11
#!/bin/bash
2-
set -euo pipefail
3-
WORKSPACE="$(pwd)"
4-
KERNEL="$(uname -s)"
5-
MATCHINE="$(uname -m)"
6-
CURL_VERSION="8.6.0_1"
7-
WOA_TOOLCHAIN_VERSION="2024-02-08"
8-
MINGW_CURL_WIN64_BLOB="https://curl.se/windows/dl-$CURL_VERSION/curl-$CURL_VERSION-win64-mingw.zip"
9-
MINGW_CURL_WIN64A_BLOB="https://curl.se/windows/dl-$CURL_VERSION/curl-$CURL_VERSION-win64a-mingw.zip"
10-
MINGW32_TOOLCHAIN_BLOB="https://github.com/Windows-on-ARM-Experiments/mingw-woarm64-build/releases/download/$WOA_TOOLCHAIN_VERSION/aarch64-w64-mingw32-msvcrt-toolchain.tar.gz"
11-
12-
case "$KERNEL" in
13-
Linux)
14-
KERNEL="linux"
15-
;;
16-
Darwin)
17-
KERNEL="darwin"
18-
MATCHINE="universal"
19-
;;
20-
esac
2+
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
213

22-
function download {
23-
URL="$1"
24-
SAVED_PATH="$(mktemp)"
25-
SAVED_DIR="$(mktemp -d)"
26-
wget --no-verbose "$URL" -O "$SAVED_PATH"
27-
case "$URL" in
28-
*.zip)
29-
unzip -q -d "$SAVED_DIR" "$SAVED_PATH"
30-
rm "$SAVED_PATH"
31-
echo "$SAVED_DIR"
32-
;;
33-
*.tar.gz)
34-
tar -C "$SAVED_DIR" --gzip --extract --file="$SAVED_PATH"
35-
rm "$SAVED_PATH"
36-
echo "$SAVED_DIR"
37-
;;
38-
*)
39-
echo "$SAVED_PATH"
40-
;;
41-
esac
42-
}
4+
source "$SCRIPT_DIR/functions.sh"
435

44-
set -x
6+
set -euo pipefail
457

468
BUILD="$(mktemp -d)"
47-
cd "$BUILD" || exit 1
48-
499
ARTIFACT="$WORKSPACE/build"
5010

51-
mkdir "$BUILD/output"
52-
[ -d "$ARTIFACT" ] || mkdir "$ARTIFACT"
11+
cd "$BUILD" || exit 1
5312

54-
cp "$WORKSPACE/src/LICENSE" "$BUILD/output/lpac-LICENSE"
55-
cp "$WORKSPACE/euicc/LICENSE" "$BUILD/output/libeuicc-LICENSE"
56-
cp "$WORKSPACE/cjson/LICENSE" "$BUILD/output/cjson-LICENSE"
57-
cp "$WORKSPACE/dlfcn-win32/LICENSE" "$BUILD/output/dlfcn-win32-LICENSE"
13+
mkdir -p "$BUILD/output"
14+
mkdir -p "$ARTIFACT"
5815

5916
case "${1:-}" in
6017
make)
6118
cmake "$WORKSPACE"
6219
make -j
63-
zip -r -j "$ARTIFACT/lpac-$KERNEL-$MATCHINE.zip" output/*
20+
copy-license "$BUILD/output"
21+
copy-usage "$BUILD/output"
22+
create-bundle "$ARTIFACT/lpac-$KERNEL-$MATCHINE.zip" "$BUILD/output"
6423
;;
6524
debian)
6625
cmake "$WORKSPACE" -DCPACK_GENERATOR=DEB
@@ -70,27 +29,28 @@ debian)
7029
mingw)
7130
cmake "$WORKSPACE" -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64.cmake
7231
make -j
73-
CURL="$(download "$MINGW_CURL_WIN64_BLOB")"
74-
cp "$CURL"/curl-*-mingw/bin/libcurl-x64.dll output/libcurl.dll
75-
cp "$CURL"/curl-*-mingw/COPYING.txt output/libcurl-LICENSE
76-
zip -r -j "$ARTIFACT/lpac-windows-x86_64-mingw.zip" output/*
32+
copy-license "$BUILD/output"
33+
copy-curl-win "$BUILD/output"
34+
copy-usage "$BUILD/output"
35+
create-bundle "$ARTIFACT/lpac-windows-x86_64-mingw.zip" "$BUILD/output"
7736
;;
7837
woa-mingw)
7938
TOOLCHAIN="$(download "$MINGW32_TOOLCHAIN_BLOB")"
8039
cmake "$WORKSPACE" -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64-woa.cmake "-DTOOLCHAIN_BIN_PATH=$TOOLCHAIN/bin"
8140
make -j
82-
CURL="$(download "$MINGW_CURL_WIN64A_BLOB")"
83-
cp "$CURL"/curl-*-mingw/bin/libcurl-arm64.dll output/libcurl.dll
84-
cp "$CURL"/curl-*-mingw/COPYING.txt output/libcurl-LICENSE
85-
zip -r -j "$ARTIFACT/lpac-windows-arm64-mingw.zip" output/*
41+
rm -rf "$TOOLCHAIN"
42+
copy-license "$BUILD/output"
43+
copy-curl-woa "$BUILD/output"
44+
copy-usage "$BUILD/output"
45+
create-bundle "$ARTIFACT/lpac-windows-arm64-mingw.zip" "$BUILD/output"
8646
;;
8747
woa-zig)
8848
cmake "$WORKSPACE" -DCMAKE_TOOLCHAIN_FILE=./cmake/aarch64-windows-zig.cmake
8949
make -j
90-
CURL="$(download "$MINGW_CURL_WIN64A_BLOB")"
91-
cp "$CURL"/curl-*-mingw/bin/libcurl-arm64.dll output/libcurl.dll
92-
cp "$CURL"/curl-*-mingw/COPYING.txt output/libcurl-LICENSE
93-
zip -r -j "$ARTIFACT/lpac-windows-arm64-zig.zip" output/*
50+
copy-license "$BUILD/output"
51+
copy-curl-woa "$BUILD/output"
52+
copy-usage "$BUILD/output"
53+
create-bundle "$ARTIFACT/lpac-windows-arm64-zig.zip" "$BUILD/output"
9454
;;
9555
*)
9656
echo "Usage: $0 {make,debian,mingw,woa-mingw,woa-zig}"

scripts/build-woa.sh

Lines changed: 9 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,28 @@
11
#!/bin/bash
2-
set -euo pipefail
3-
WORKSPACE="$(pwd)"
4-
CURL_VERSION="8.6.0_1"
5-
WOA_TOOLCHAIN_VERSION="2024-02-08"
6-
MINGW_CURL_WIN64A_BLOB="https://curl.se/windows/dl-$CURL_VERSION/curl-$CURL_VERSION-win64a-mingw.zip"
7-
MINGW32_TOOLCHAIN_BLOB="https://github.com/Windows-on-ARM-Experiments/mingw-woarm64-build/releases/download/$WOA_TOOLCHAIN_VERSION/aarch64-w64-mingw32-msvcrt-toolchain.tar.gz"
2+
SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
83

9-
function download {
10-
URL="$1"
11-
SAVED_PATH="$(mktemp)"
12-
SAVED_DIR="$(mktemp -d)"
13-
wget --no-verbose "$URL" -O "$SAVED_PATH"
14-
case "$URL" in
15-
*.zip)
16-
unzip -q -d "$SAVED_DIR" "$SAVED_PATH"
17-
rm "$SAVED_PATH"
18-
echo "$SAVED_DIR"
19-
;;
20-
*.tar.gz)
21-
tar -C "$SAVED_DIR" --gzip --extract --file="$SAVED_PATH"
22-
rm "$SAVED_PATH"
23-
echo "$SAVED_DIR"
24-
;;
25-
*)
26-
echo "$SAVED_PATH"
27-
;;
28-
esac
29-
}
4+
source "$SCRIPT_DIR/functions.sh"
305

31-
set -x
6+
set -euo pipefail
327

338
BUILD="$(mktemp -d)"
349
cd "$BUILD" || exit 1
3510

36-
mkdir "$BUILD/output"
37-
cp "$WORKSPACE/src/LICENSE" output/lpac-LICENSE
38-
cp "$WORKSPACE/euicc/LICENSE" output/libeuicc-LICENSE
39-
cp "$WORKSPACE/cjson/LICENSE" output/cjson-LICENSE
40-
cp "$WORKSPACE/dlfcn-win32/LICENSE" output/dlfcn-win32-LICENSE
41-
4211
case "${1:-}" in
4312
mingw)
4413
TOOLCHAIN="$(download "$MINGW32_TOOLCHAIN_BLOB")"
4514
cmake "$WORKSPACE" -DCMAKE_TOOLCHAIN_FILE=./cmake/linux-mingw64-woa.cmake "-DTOOLCHAIN_BIN_PATH=$TOOLCHAIN/bin"
4615
make -j
47-
CURL="$(download "$MINGW_CURL_WIN64A_BLOB")"
48-
cp "$CURL"/curl-*-mingw/bin/libcurl-arm64.dll output/libcurl.dll
49-
cp "$CURL"/curl-*-mingw/COPYING.txt output/libcurl-LICENSE
16+
copy-license "$BUILD/output"
17+
copy-curl-woa "$BUILD/output"
18+
copy-usage "$BUILD/output"
5019
;;
5120
zig)
5221
cmake "$WORKSPACE" -DCMAKE_TOOLCHAIN_FILE=./cmake/aarch64-windows-zig.cmake
5322
make -j
54-
CURL="$(download "$MINGW_CURL_WIN64A_BLOB")"
55-
cp "$CURL"/curl-*-mingw/bin/libcurl-arm64.dll output/libcurl.dll
56-
cp "$CURL"/curl-*-mingw/COPYING.txt output/libcurl-LICENSE
23+
copy-license "$BUILD/output"
24+
copy-curl-woa "$BUILD/output"
25+
copy-usage "$BUILD/output"
5726
;;
5827
*)
5928
echo "Usage: $0 {mingw,zig}"

scripts/functions.sh

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/bin/bash
2+
export KERNEL="$(uname -s)"
3+
export MATCHINE="$(uname -m)"
4+
5+
export WORKSPACE="${GITHUB_WORKSPACE:-$(pwd)}"
6+
export CURL_VERSION="8.6.0_1"
7+
export WOA_TOOLCHAIN_VERSION="2024-02-08"
8+
export MINGW_CURL_WIN64_BLOB="https://curl.se/windows/dl-$CURL_VERSION/curl-$CURL_VERSION-win64-mingw.zip"
9+
export MINGW_CURL_WIN64A_BLOB="https://curl.se/windows/dl-$CURL_VERSION/curl-$CURL_VERSION-win64a-mingw.zip"
10+
export MINGW32_TOOLCHAIN_BLOB="https://github.com/Windows-on-ARM-Experiments/mingw-woarm64-build/releases/download/$WOA_TOOLCHAIN_VERSION/aarch64-w64-mingw32-msvcrt-toolchain.tar.gz"
11+
12+
case "$KERNEL" in
13+
Linux)
14+
KERNEL="linux"
15+
;;
16+
Darwin)
17+
KERNEL="darwin"
18+
MATCHINE="universal"
19+
;;
20+
esac
21+
22+
function download {
23+
local URL="$1"
24+
local SAVED_PATH="$(mktemp)"
25+
local SAVED_DIR="$(mktemp -d)"
26+
wget --no-verbose "$URL" -O "$SAVED_PATH"
27+
case "$URL" in
28+
*.zip)
29+
unzip -q -d "$SAVED_DIR" "$SAVED_PATH"
30+
rm "$SAVED_PATH"
31+
echo "$SAVED_DIR"
32+
;;
33+
*.tar.gz)
34+
tar -C "$SAVED_DIR" --gzip --extract --file="$SAVED_PATH"
35+
rm "$SAVED_PATH"
36+
echo "$SAVED_DIR"
37+
;;
38+
*)
39+
echo "$SAVED_PATH"
40+
;;
41+
esac
42+
}
43+
44+
function copy-license {
45+
local OUTPUT="$1"
46+
47+
cp "$WORKSPACE/src/LICENSE" "$OUTPUT/LICENSE-lpac"
48+
cp "$WORKSPACE/euicc/LICENSE" "$OUTPUT/LICENSE-libeuicc"
49+
cp "$WORKSPACE/cjson/LICENSE" "$OUTPUT/LICENSE-cjson"
50+
cp "$WORKSPACE/dlfcn-win32/LICENSE" "$OUTPUT/LICENSE-dlfcn-win32"
51+
}
52+
53+
function copy-curl-woa {
54+
local OUTPUT="$1"
55+
56+
CURL="$(download "$MINGW_CURL_WIN64A_BLOB")"
57+
cp "$CURL"/curl-*-mingw/bin/libcurl-arm64.dll "$OUTPUT/libcurl.dll"
58+
cp "$CURL"/curl-*-mingw/COPYING.txt "$OUTPUT/LICENSE-libcurl"
59+
rm -rf "$CURL"
60+
}
61+
62+
function copy-curl-win {
63+
local OUTPUT="$1"
64+
65+
CURL="$(download "$MINGW_CURL_WIN64_BLOB")"
66+
cp "$CURL"/curl-*-mingw/bin/libcurl-x64.dll "$OUTPUT/libcurl.dll"
67+
cp "$CURL"/curl-*-mingw/COPYING.txt "$OUTPUT/LICENSE-libcurl"
68+
rm -rf "$CURL"
69+
}
70+
71+
function copy-usage {
72+
local OUTPUT="$1"
73+
74+
cp "$WORKSPACE/docs/USAGE.md" "$OUTPUT/README.md"
75+
}
76+
77+
function create-bundle {
78+
local BUNDLE_FILE="$1"
79+
local INPUT_DIR="$2"
80+
81+
pushd "$INPUT_DIR"
82+
zip -r "$BUNDLE_FILE" *
83+
popd
84+
}

scripts/setup-debian.sh

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
#!/bin/bash
2-
set -xeuo pipefail
3-
sudo apt-get update
4-
sudo apt-get install -y build-essential libpcsclite-dev libcurl4-openssl-dev gcc-mingw-w64 g++-mingw-w64 zip
2+
set -euo pipefail
3+
export DEBIAN_FRONTEND=noninteractive
4+
export DEBIAN_PRIORITY=critical
5+
6+
apt-get -qq -o=Dpkg::Use-Pty=0 update
7+
apt-get -qq -o=Dpkg::Use-Pty=0 install -y build-essential libpcsclite-dev libcurl4-openssl-dev zip
8+
9+
case "${1:-}" in
10+
mingw)
11+
apt-get -qq -o=Dpkg::Use-Pty=0 install gcc-mingw-w64 g++-mingw-w64
12+
;;
13+
esac

0 commit comments

Comments
 (0)