-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbuild.sh
More file actions
executable file
·140 lines (127 loc) · 3.99 KB
/
build.sh
File metadata and controls
executable file
·140 lines (127 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/bin/bash
set -e
set -u
# Build a base image
DRYCC_REGISTRY=${DRYCC_REGISTRY:-${DEV_REGISTRY:-registry.drycc.cc}}
# make sure we are in this dir
CURRENT_DIR=$(cd "$(dirname "$0")"; pwd)
#dist dir
DIST_DIR="${CURRENT_DIR}"/_dist
# codename
CODENAME="${CODENAME:?codename is required}"
# buildpack-dep image name
BUILDPACK_DEP_IMAGE="${DRYCC_REGISTRY}"/drycc/buildpack-dep:"${CODENAME}"
function create-buildpack-dep {
# build buildpack-dep image
podman build --pull -f "${CURRENT_DIR}"/Dockerfile --build-arg CODENAME="${CODENAME}" --build-arg DRYCC_REGISTRY="${DRYCC_REGISTRY}" . -t "${BUILDPACK_DEP_IMAGE}"
}
function build {
mkdir -p "$DIST_DIR"
STACK_NAME="${1:?STACK_NAME is required}"
stack_version="${2:?stack_version is required}"
create-buildpack-dep
podman run --rm \
--privileged=true \
--env STACK_DOWNLOAD_URL="${STACK_DOWNLOAD_URL:-}" \
--env STACK_NAME="${STACK_NAME}" \
--env STACK_VERSION="${stack_version}" \
-v "${DIST_DIR}":"${DIST_DIR}" \
-v "${CURRENT_DIR}/stacks/${STACK_NAME}":/workspace \
-v "${CURRENT_DIR}/scripts/stack-utils":/usr/bin/stack-utils \
-w /workspace \
"${BUILDPACK_DEP_IMAGE}" \
./build.sh "${DIST_DIR}"
}
function upload {
STACK_NAME="${1:?stack_name is required}"
create-buildpack-dep
podman run --rm \
--env OSS_ENDPOINT=${OSS_ENDPOINT} \
--env OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
--env OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \
-v "${DIST_DIR}":"${DIST_DIR}" \
-v "${CURRENT_DIR}/stacks:/workspace" \
-v "${CURRENT_DIR}/scripts:/scripts" \
-w /workspace \
"${BUILDPACK_DEP_IMAGE}" \
python3 /scripts/storage.py upload "${STACK_NAME}" "${DIST_DIR}"
}
function symlink {
podman run --rm \
--env OSS_ENDPOINT=${OSS_ENDPOINT} \
--env OSS_ACCESS_KEY_ID=${OSS_ACCESS_KEY_ID} \
--env OSS_ACCESS_KEY_SECRET=${OSS_ACCESS_KEY_SECRET} \
-v "${DIST_DIR}":"${DIST_DIR}" \
-v "${CURRENT_DIR}/stacks:/workspace" \
-v "${CURRENT_DIR}/scripts:/scripts" \
-w /workspace \
"${BUILDPACK_DEP_IMAGE}" \
python3 /scripts/storage.py symlink "${1}" "${2}"
}
function renew() {
git tag -d "$1"
git push origin :refs/tags/"$1"
git tag "$1"
git push --tag
}
function patch() {
# Validate arguments
if [[ $# -ne 3 ]]; then
echo "Usage: ${FUNCNAME[0]} <tar.gz> <inner_file> <replacement>" >&2
return 1
fi
local tar_file="$1"
local inner_file="$2"
local replacement_file="$3"
# Check if files exist
if [[ ! -f "$tar_file" ]]; then
echo "Error: Tar file '$tar_file' not found" >&2
return 1
fi
if [[ ! -f "$replacement_file" ]]; then
echo "Error: Replacement file '$replacement_file' not found" >&2
return 1
fi
# Create temporary directory
local temp_dir
temp_dir=$(mktemp -d) || {
echo "Error: Failed to create temporary directory" >&2
return 1
}
trap "rm -rf '$temp_dir'" EXIT
# Extract tar file
if ! tar -xzf "$tar_file" -C "$temp_dir" 2>/dev/null; then
echo "Error: Failed to extract '$tar_file'" >&2
return 1
fi
# Check if inner file exists in archive
if [[ ! -f "${temp_dir}/${inner_file}" ]]; then
echo "Error: File '$inner_file' not found in archive" >&2
return 1
fi
# Replace the file
if ! cp "$replacement_file" "${temp_dir}/${inner_file}"; then
echo "Error: Failed to replace file" >&2
return 1
fi
tar --numeric-owner -czf "${tar_file: :-7}.patched.tar.gz" -C "$temp_dir" . --transform='s,^./,,'
echo "Success: File replaced in '$tar_file'"
return 0
}
function all() {
STACK_NAME=$(echo "${1}" | cut -d '@' -f 1)
STACK_VERSION=$(echo "${1}" | cut -d '@' -f 2)
build "${STACK_NAME}" "${STACK_VERSION}"
upload "${STACK_NAME}"
}
_is_sourced() {
# https://unix.stackexchange.com/a/215279
[ "${#FUNCNAME[@]}" -ge 2 ] \
&& [ "${FUNCNAME[0]}" = '_is_sourced' ] \
&& [ "${FUNCNAME[1]}" = 'source' ]
}
if ! _is_sourced; then
action=$1
shift 1
$action "$@"
fi