aboutsummaryrefslogtreecommitdiffstats
path: root/docker/prepare_context.sh
blob: ca8bf5003057e90aaf65441b586ecd615489f50d (plain) (blame)
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
#!/usr/bin/env bash

# SPDX-FileCopyrightText: 2023-2024 The Refinery Authors <https://refinery.tools/>
#
# SPDX-License-Identifier: EPL-2.0

set -euo pipefail

refinery_version="$(./get_version.sh)"
cli_distribution_name="refinery-generator-cli-${refinery_version}"
web_distribution_name="refinery-language-web-${refinery_version}"

rm -rf "${cli_distribution_name}" "${web_distribution_name}" {cli,web}_dist context/extracted

tar -xvf "../subprojects/generator-cli/build/distributions/${cli_distribution_name}.tar"
mv "${cli_distribution_name}" cli_dist
tar -xvf "../subprojects/language-web/build/distributions/${web_distribution_name}.tar"
mv "${web_distribution_name}" web_dist
mkdir -p context/extracted/{cli,web}_{,app_}lib \
    context/extracted/common_{,amd64_,arm64_}lib \
    context/extracted/{cli,web}_{amd64,arm64}_bin

move_application_jars() {
    prefix="$1"
    # Our application itself is very small, so it will get added as the last layer
    # of both containers.
    mv "${prefix}"_dist/lib/refinery-* "context/extracted/${prefix}_app_lib"
}

move_application_jars cli
move_application_jars web

for i in cli_dist/lib/*; do
    j="web${i#cli}"
    if [[ -f "$j" ]]; then
        mv "$i" "context/extracted/common_lib${i#cli_dist/lib}"
        rm "$j"
    fi
done

# Move architecture-specific jars to their repsective directories.
mv context/extracted/common_lib/ortools-linux-x86-64-*.jar context/extracted/common_amd64_lib
mv context/extracted/common_lib/ortools-linux-aarch64-*.jar context/extracted/common_arm64_lib
rm context/extracted/common_lib/ortools-{darwin,win32}-*.jar

prepare_application() {
    prefix="$1"
    suffix="$2"
    # Move the applications jars for the dependencies into a separate Docker layer
    # to enable faster updates.
    mv "${prefix}"_dist/lib/* "context/extracted/${prefix}_lib"
    # Omit references to jars not present for the current architecture from the
    # startup scripts.
    sed 's/:\$APP_HOME\/lib\/ortools-\(darwin\|win32\|linux-aarch64\)[^:]\+\.jar//g' \
        "${prefix}_dist/bin/refinery-${suffix}" \
        > "context/extracted/${prefix}_amd64_bin/refinery-${suffix}"
    sed 's/:\$APP_HOME\/lib\/ortools-\(darwin\|win32\|linux-x86-64\)[^:]\+\.jar//g' \
        "${prefix}_dist/bin/refinery-${suffix}" \
        > "context/extracted/${prefix}_arm64_bin/refinery-${suffix}"
    chmod a+x "context/extracted/${prefix}"_{amd64,arm64}_bin/refinery-"${suffix}"
}

prepare_application cli generator-cli
prepare_application web language-web

rm -rf {cli,web}_dist