summaryrefslogtreecommitdiffstats
path: root/comm/taskcluster/docker/tb-flatpak/runme.sh
blob: 389929a1248901a917b5a6d87bbe5eac6ab0a020 (plain)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#!/bin/bash
set -xe

# Future products supporting Flatpaks will set this accordingly
: PRODUCT                       "${PRODUCT:=thunderbird}"

# Required environment variables
test "$VERSION"
test "$BUILD_NUMBER"
test "$CANDIDATES_DIR"
test "$L10N_CHANGESETS"
test "$FLATPAK_BRANCH"
test "$MANIFEST_URL"
test "$RELEASE_NOTES_URL"

# Optional environment variables
: WORKSPACE                     "${WORKSPACE:=/home/worker/workspace}"
: ARTIFACTS_DIR                 "${ARTIFACTS_DIR:=/home/worker/artifacts}"

# Populate remaining environment variables
SCRIPT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
TARGET_TAR_XZ_FULL_PATH="$ARTIFACTS_DIR/target.flatpak.tar.xz"
SOURCE_DEST="${WORKSPACE}/source"
DISTRIBUTION_DIR="$SOURCE_DEST/distribution"
FREEDESKTOP_VERSION="23.08"
FIREFOX_BASEAPP_CHANNEL="23.08"

# Create alias for ideal curl command
CURL="curl --location --retry 10 --retry-delay 10"

# Get current date
#
# This is used to populate the datetime in org.mozilla.Thunderbird.appdata.xml
DATE=$(date +%Y-%m-%d)
export DATE

# Prepare directories
#
# This command is temporary, there's an upcoming fix in the upstream
# Docker image that we work on top of, from 'freedesktopsdk', that will
# make these two lines go away eventually.
mkdir -p /root /tmp /var/tmp
mkdir -p "$ARTIFACTS_DIR"
rm -rf "$SOURCE_DEST" && mkdir -p "$SOURCE_DEST"

# Ensure a clean slate in the local Flatpak repo
rm -rf ~/.local/share/flatpak/

# Download en-US linux64 (English, 64-bit Linux) Thunderbird binary
$CURL -o "${WORKSPACE}/thunderbird.tar.bz2" \
    "${CANDIDATES_DIR}/${VERSION}-candidates/build${BUILD_NUMBER}/linux-x86_64/en-US/thunderbird-${VERSION}.tar.bz2"

# Fetch list of Thunderbird locales
$CURL -o "${WORKSPACE}/l10n-changesets.json" "$L10N_CHANGESETS"
locales=$(python3 "$SCRIPT_DIRECTORY/extract_locales_from_l10n_json.py" "${WORKSPACE}/l10n-changesets.json")

# Fetch langpack extension for each locale
mkdir -p "$DISTRIBUTION_DIR"
mkdir -p "$DISTRIBUTION_DIR/extensions"
for locale in $locales; do
    $CURL -o "$DISTRIBUTION_DIR/extensions/langpack-${locale}@thunderbird.mozilla.org.xpi" \
        "$CANDIDATES_DIR/${VERSION}-candidates/build${BUILD_NUMBER}/linux-x86_64/xpi/${locale}.xpi"
done

# Download artifacts from dependencies and build the .desktop file.
(
source /scripts/venv/bin/activate
python3 /scripts/build_desktop_file.py -o "$WORKSPACE/org.mozilla.Thunderbird.desktop" \
  -t "/scripts/org.mozilla.Thunderbird.desktop.jinja2" \
  -l "$WORKSPACE/l10n-central" \
  -L "$WORKSPACE/l10n-changesets.json" \
  -f "mail/branding/thunderbird/brand.ftl" \
  -f "mail/messenger/flatpak.ftl"
)

# Generate AppData XML from template, add various 
envsubst < "$SCRIPT_DIRECTORY/org.mozilla.Thunderbird.appdata.xml.in" > "${WORKSPACE}/org.mozilla.Thunderbird.appdata.xml"
cp -v "$SCRIPT_DIRECTORY/distribution.ini" "$WORKSPACE"
cp -v "$SCRIPT_DIRECTORY/launch_script.sh" "$WORKSPACE"
cd "${WORKSPACE}"

# Fetch and install Firefox base app (as user, not system-wide)
flatpak remote-add --user --if-not-exists --from flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install --user -y flathub org.mozilla.firefox.BaseApp//${FIREFOX_BASEAPP_CHANNEL} --no-deps

# Create build directory and add Firefox base app files
#
# This command is temporary, there's an upcoming fix in the upstream
# Docker image that we work on top of, from 'freedesktopsdk', that will
# make these two lines go away eventually.
mkdir -p build
cp -r ~/.local/share/flatpak/app/org.mozilla.firefox.BaseApp/current/active/files build/files

# Create Flatpak build metadata file for Thunderbird
ARCH=$(flatpak --default-arch)
cat <<EOF > build/metadata
[Application]
name=org.mozilla.Thunderbird
runtime=org.freedesktop.Platform/${ARCH}/${FREEDESKTOP_VERSION}
sdk=org.freedesktop.Sdk/${ARCH}/${FREEDESKTOP_VERSION}
base=app/org.mozilla.firefox.BaseApp/${ARCH}/${FIREFOX_BASEAPP_CHANNEL}
[Extension org.mozilla.Thunderbird.Locale]
directory=share/runtime/langpack
autodelete=true
locale-subset=true
EOF

# Create Flatpak build metadata file for locales
cat <<EOF > build/metadata.locale
[Runtime]
name=org.mozilla.Thunderbird.Locale

[ExtensionOf]
ref=app/org.mozilla.Thunderbird/${ARCH}/${FLATPAK_BRANCH}
EOF

# Install Thunderbird files into appdir
appdir=build/files
install -d "${appdir}/lib/"
(cd "${appdir}/lib/" && tar jxf "${WORKSPACE}/thunderbird.tar.bz2")
install -D -m644 -t "${appdir}/share/appdata" org.mozilla.Thunderbird.appdata.xml
install -D -m644 -t "${appdir}/share/applications" org.mozilla.Thunderbird.desktop
for size in 16 32 48 64 128; do
    install -D -m644 "${appdir}/lib/thunderbird/chrome/icons/default/default${size}.png" "${appdir}/share/icons/hicolor/${size}x${size}/apps/org.mozilla.Thunderbird.png"
done

# Generate AppStream metadata and add screenshots from Flathub
appstream-compose --prefix="${appdir}" --origin=flatpak --basename=org.mozilla.Thunderbird org.mozilla.Thunderbird
appstream-util mirror-screenshots "${appdir}"/share/app-info/xmls/org.mozilla.Thunderbird.xml.gz "https://dl.flathub.org/repo/screenshots/org.mozilla.Thunderbird-${FLATPAK_BRANCH}" build/screenshots "build/screenshots/org.mozilla.Thunderbird-${FLATPAK_BRANCH}"

# Install locales, distribution, and launch_script.sh into appdir
#
# We must install each locale individually, since we're symlinking
# each one.
#
# We put the langpacks in /app/share/locale/$LANG_CODE and symlink that
# directory to where Thunderbird looks them up; this way only the subset
# of locales configured on the user's system are downloaded, instead of
# all locales.
mkdir -p "${appdir}/lib/thunderbird/distribution/extensions"
for locale in $locales; do
    install -D -m644 -t "${appdir}/share/runtime/langpack/${locale%%-*}/" "${DISTRIBUTION_DIR}/extensions/langpack-${locale}@thunderbird.mozilla.org.xpi"
    ln -sf "/app/share/runtime/langpack/${locale%%-*}/langpack-${locale}@thunderbird.mozilla.org.xpi" "${appdir}/lib/thunderbird/distribution/extensions/langpack-${locale}@thunderbird.mozilla.org.xpi"
done
install -D -m644 -t "${appdir}/lib/thunderbird/distribution" distribution.ini
install -D -m755 launch_script.sh "${appdir}/bin/thunderbird"

# Build Flatpak
#
# We use features=devel to enable ptrace, which we need for the crash
# reporter.  The application is still confined in a pid namespace, so
# that won't let us escape the flatpak sandbox.  See bug 1653852.
#
# We use own-name to ensure Thunderbird has access to DBus, as app ID
# (org.mozilla.Thunderbird) does not match bus names
# (org.mozilla.thunderbird, lowercase "t"). The app ID may be updated
# in the future to match the default bus names.
flatpak build-finish build                                      \
        --allow=devel                                           \
        --share=ipc                                             \
        --share=network                                         \
        --socket=pulseaudio                                     \
        --socket=wayland                                        \
        --socket=x11                                            \
        --socket=pcsc                                           \
        --socket=cups                                           \
        --require-version=0.10.3                                \
        --persist=.thunderbird                                  \
        --filesystem=xdg-download:rw                            \
        --filesystem=~/.gnupg                                   \
        --filesystem=xdg-run/gnupg:ro                           \
        --filesystem=xdg-run/speech-dispatcher:ro               \
        --filesystem=/run/.heim_org.h5l.kcm-socket              \
        --device=dri                                            \
        --own-name="org.mozilla.thunderbird.*"                  \
        --own-name="org.mozilla.thunderbird_beta.*"             \
        --talk-name="org.gtk.vfs.*"                             \
        --talk-name=org.a11y.Bus                                \
        --system-talk-name=org.freedesktop.NetworkManager       \
        --command=thunderbird

# Export Flatpak build into repo
flatpak build-export --disable-sandbox --no-update-summary --exclude='/share/runtime/langpack/*/*' repo build "$FLATPAK_BRANCH"
flatpak build-export --disable-sandbox --no-update-summary --metadata=metadata.locale --files=files/share/runtime/langpack repo build "$FLATPAK_BRANCH"

# Commit screenshots to repo
ostree commit --repo=repo --canonical-permissions --branch=screenshots/x86_64 build/screenshots
flatpak build-update-repo --generate-static-deltas repo

# Package Flatpak repo as tar
tar cvfJ flatpak.tar.xz repo
mv -- flatpak.tar.xz "$TARGET_TAR_XZ_FULL_PATH"

# Build Flatpak bundle (.flatpak) from repo
flatpak build-bundle "$WORKSPACE"/repo org.mozilla.Thunderbird.flatpak org.mozilla.Thunderbird "$FLATPAK_BRANCH"

# Move bundle to artifacts
mv org.mozilla.Thunderbird.flatpak "$ARTIFACTS_DIR/"