186 lines
8.3 KiB
Bash
Executable file
186 lines
8.3 KiB
Bash
Executable file
#!/bin/bash
|
|
set -xe
|
|
|
|
# Future products supporting Flatpaks will set this accordingly
|
|
: PRODUCT "${PRODUCT:=icecat}"
|
|
|
|
# Required env variables
|
|
|
|
test "$VERSION"
|
|
test "$BUILD_NUMBER"
|
|
test "$CANDIDATES_DIR"
|
|
test "$L10N_CHANGESETS"
|
|
test "$FLATPAK_BRANCH"
|
|
|
|
# Optional env variables
|
|
: WORKSPACE "${WORKSPACE:=/home/worker/workspace}"
|
|
: ARTIFACTS_DIR "${ARTIFACTS_DIR:=/home/worker/artifacts}"
|
|
|
|
pwd
|
|
|
|
# XXX: this is used to populate the datetime in org.gnu.icecat.appdata.xml
|
|
DATE=$(date +%Y-%m-%d)
|
|
export DATE
|
|
|
|
SCRIPT_DIRECTORY="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
TARGET_TAR_XZ_FULL_PATH="$ARTIFACTS_DIR/target.flatpak.tar.xz"
|
|
SOURCE_DEST="${WORKSPACE}/source"
|
|
|
|
# When updating this, please make sure to keep in sync the script for symbol
|
|
# scraping at
|
|
# https://github.com/mozilla/symbol-scrapers/blob/master/icecat-flatpak/script.sh
|
|
FREEDESKTOP_VERSION="23.08"
|
|
ICECAT_BASEAPP_CHANNEL="23.08"
|
|
|
|
|
|
# XXX: these commands are temporarily, 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"
|
|
|
|
# XXX ensure we have a clean slate in the local flatpak repo
|
|
rm -rf ~/.local/share/flatpak/
|
|
|
|
|
|
CURL="curl --location --retry 10 --retry-delay 10"
|
|
|
|
# Download en-US linux64 binary
|
|
$CURL -o "${WORKSPACE}/icecat.tar.bz2" \
|
|
"${CANDIDATES_DIR}/${VERSION}-candidates/build${BUILD_NUMBER}/linux-x86_64/en-US/icecat-${VERSION}.tar.bz2"
|
|
|
|
# Use list of locales to fetch L10N XPIs
|
|
$CURL -o "${WORKSPACE}/l10n_changesets.json" "$L10N_CHANGESETS"
|
|
locales=$(python3 "$SCRIPT_DIRECTORY/extract_locales_from_l10n_json.py" "${WORKSPACE}/l10n_changesets.json")
|
|
|
|
DISTRIBUTION_DIR="$SOURCE_DEST/distribution"
|
|
if [[ "$PRODUCT" == "icecat" ]]; then
|
|
# Get Flatpak configuration
|
|
PARTNER_CONFIG_DIR="$WORKSPACE/partner_config"
|
|
git clone https://github.com/mozilla-partners/flatpak.git "$PARTNER_CONFIG_DIR"
|
|
mv "$PARTNER_CONFIG_DIR/desktop/flatpak/distribution" "$DISTRIBUTION_DIR"
|
|
else
|
|
mkdir -p "$DISTRIBUTION_DIR"
|
|
fi
|
|
|
|
mkdir -p "$DISTRIBUTION_DIR/extensions"
|
|
for locale in $locales; do
|
|
$CURL -o "$DISTRIBUTION_DIR/extensions/langpack-${locale}@icecat.mozilla.org.xpi" \
|
|
"$CANDIDATES_DIR/${VERSION}-candidates/build${BUILD_NUMBER}/linux-x86_64/xpi/${locale}.xpi"
|
|
done
|
|
|
|
envsubst < "$SCRIPT_DIRECTORY/org.gnu.icecat.appdata.xml.in" > "${WORKSPACE}/org.gnu.icecat.appdata.xml"
|
|
cp -v "$SCRIPT_DIRECTORY/org.gnu.icecat.desktop" "$WORKSPACE"
|
|
cp -v "$SCRIPT_DIRECTORY/launch-script.sh" "$WORKSPACE"
|
|
cp -v "$SCRIPT_DIRECTORY/icecat-symbolic.svg" "$WORKSPACE"
|
|
cd "${WORKSPACE}"
|
|
|
|
flatpak remote-add --user --if-not-exists --from flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
# XXX: added --user to `flatpak install` to avoid ambiguity
|
|
flatpak install --user -y flathub org.gnu.icecat.BaseApp//${ICECAT_BASEAPP_CHANNEL} --no-deps
|
|
|
|
# XXX: this command is temporarily, 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.gnu.icecat.BaseApp/current/active/files build/files
|
|
|
|
ARCH=$(flatpak --default-arch)
|
|
cat <<EOF > build/metadata
|
|
[Application]
|
|
name=org.gnu.icecat
|
|
runtime=org.freedesktop.Platform/${ARCH}/${FREEDESKTOP_VERSION}
|
|
sdk=org.freedesktop.Sdk/${ARCH}/${FREEDESKTOP_VERSION}
|
|
base=app/org.gnu.icecat.BaseApp/${ARCH}/${ICECAT_BASEAPP_CHANNEL}
|
|
[Extension org.gnu.icecat.Locale]
|
|
directory=share/runtime/langpack
|
|
autodelete=true
|
|
locale-subset=true
|
|
|
|
[Extension org.freedesktop.Platform.ffmpeg-full]
|
|
directory=lib/ffmpeg
|
|
add-ld-path=.
|
|
no-autodownload=true
|
|
version=${FREEDESKTOP_VERSION}
|
|
|
|
[Extension org.gnu.icecat.systemconfig]
|
|
directory=etc/icecat
|
|
no-autodownload=true
|
|
EOF
|
|
|
|
cat <<EOF > build/metadata.locale
|
|
[Runtime]
|
|
name=org.gnu.icecat.Locale
|
|
|
|
[ExtensionOf]
|
|
ref=app/org.gnu.icecat/${ARCH}/${FLATPAK_BRANCH}
|
|
EOF
|
|
|
|
appdir=build/files
|
|
install -d "${appdir}/lib/"
|
|
(cd "${appdir}/lib/" && tar jxf "${WORKSPACE}/icecat.tar.bz2")
|
|
install -D -m644 -t "${appdir}/share/appdata" org.gnu.icecat.appdata.xml
|
|
install -D -m644 -t "${appdir}/share/applications" org.gnu.icecat.desktop
|
|
for size in 16 32 48 64 128; do
|
|
install -D -m644 "${appdir}/lib/icecat/browser/chrome/icons/default/default${size}.png" "${appdir}/share/icons/hicolor/${size}x${size}/apps/org.gnu.icecat.png"
|
|
done
|
|
install -D -m644 icecat-symbolic.svg "${appdir}/share/icons/hicolor/symbolic/apps/org.gnu.icecat-symbolic.svg"
|
|
mkdir -p "${appdir}/lib/ffmpeg"
|
|
mkdir -p "${appdir}/etc/icecat"
|
|
|
|
appstream-compose --prefix="${appdir}" --origin=flatpak --basename=org.gnu.icecat org.gnu.icecat
|
|
appstream-util mirror-screenshots "${appdir}"/share/app-info/xmls/org.gnu.icecat.xml.gz "https://dl.flathub.org/repo/screenshots/org.gnu.icecat-${FLATPAK_BRANCH}" build/screenshots "build/screenshots/org.gnu.icecat-${FLATPAK_BRANCH}"
|
|
|
|
# XXX: we used to `install -D` before which automatically created the components
|
|
# of target, now we need to manually do this since we're symlinking
|
|
mkdir -p "${appdir}/lib/icecat/distribution/extensions"
|
|
# XXX: we put the langpacks in /app/share/locale/$LANG_CODE and symlink that
|
|
# directory to where IceCat looks them up; this way only subset configured
|
|
# on user system is downloaded vs all locales
|
|
for locale in $locales; do
|
|
install -D -m644 -t "${appdir}/share/runtime/langpack/${locale%%-*}/" "${DISTRIBUTION_DIR}/extensions/langpack-${locale}@icecat.mozilla.org.xpi"
|
|
ln -sf "/app/share/runtime/langpack/${locale%%-*}/langpack-${locale}@icecat.mozilla.org.xpi" "${appdir}/lib/icecat/distribution/extensions/langpack-${locale}@icecat.mozilla.org.xpi"
|
|
done
|
|
install -D -m644 -t "${appdir}/lib/icecat/distribution" "$DISTRIBUTION_DIR/distribution.ini"
|
|
install -D -m755 launch-script.sh "${appdir}/bin/icecat"
|
|
|
|
# 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.
|
|
|
|
flatpak build-finish build \
|
|
--allow=devel \
|
|
--share=ipc \
|
|
--share=network \
|
|
--socket=pulseaudio \
|
|
--socket=wayland \
|
|
--socket=fallback-x11 \
|
|
--socket=pcsc \
|
|
--socket=cups \
|
|
--require-version=0.11.1 \
|
|
--persist=.mozilla \
|
|
--env=DICPATH=/usr/share/hunspell \
|
|
--filesystem=xdg-download:rw \
|
|
--filesystem=/run/.heim_org.h5l.kcm-socket \
|
|
--filesystem=xdg-run/speech-dispatcher:ro \
|
|
--device=all \
|
|
--talk-name=org.freedesktop.FileManager1 \
|
|
--system-talk-name=org.freedesktop.NetworkManager \
|
|
--talk-name=org.a11y.Bus \
|
|
--talk-name="org.gtk.vfs.*" \
|
|
--own-name="org.mpris.MediaPlayer2.icecat.*" \
|
|
--own-name="org.gnu.icecat.*" \
|
|
--own-name="org.gnu.icecat_beta.*" \
|
|
--command=icecat
|
|
|
|
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"
|
|
ostree commit --repo=repo --canonical-permissions --branch=screenshots/x86_64 build/screenshots
|
|
flatpak build-update-repo --generate-static-deltas repo
|
|
tar cvfJ flatpak.tar.xz repo
|
|
|
|
mv -- flatpak.tar.xz "$TARGET_TAR_XZ_FULL_PATH"
|
|
|
|
# XXX: if we ever wanted to go back to building flatpak bundles, we can revert this command; useful for testing individual artifacts, not publishable
|
|
# flatpak build-bundle "$WORKSPACE"/repo org.gnu.icecat.flatpak org.gnu.icecat
|
|
# TARGET_FULL_PATH="$ARTIFACTS_DIR/target.flatpak"
|
|
# mv -- *.flatpak "$TARGET_FULL_PATH"
|