diff options
Diffstat (limited to 'justfile')
| -rw-r--r-- | justfile | 137 |
1 files changed, 105 insertions, 32 deletions
@@ -11,6 +11,7 @@ clean_images := "" # Derived Values --------------------------------------------------------------- architecture := arch() +version := `grep -m1 -o "[^_]version: '[^']*'" meson.build | awk -F"'" '{print $2}'` filename := f"{{app_name}}-{{architecture}}-{{channel}}" # Packaging -------------------------------------------------------------------- @@ -87,7 +88,7 @@ update_flatpak_dependencies: cd {{flatpak_cargo_generator}} && `poetry env activate` && python3 flatpak-cargo-generator.py {{justfile_directory()}}/Cargo.lock -o {{justfile_directory()}}/build-aux/flatpak/cargo-sources.json && deactivate # Builds a flatpak and exports the .flatpak file -package-flatpak: _ensure_distdir update_flatpak_dependencies +package-flatpak: _ensure-distdir update_flatpak_dependencies flatpak-builder --force-clean --user --install-deps-from=flathub --repo={{repodir}} --install {{flatpakdir}} ./build-aux/flatpak/systems.tranquil.Map.yml flatpak build-bundle {{repodir}} {{distdir}}/{{filename}}.flatpak systems.tranquil.Map @@ -97,24 +98,95 @@ _fetch-linuxdeploy: @chmod +x {{linuxdeploy}} # Builds an AppImage -package-appimage: _ensure_distdir (build-container appimage_container) _fetch-linuxdeploy && (_clean_image appimage_container) - @echo "=== Building AppImage ===" - ./scripts/build_appimage.sh {{container_image_prefix}} trixie {{app_name}} {{architecture}} {{channel}} {{linuxdeploy}} +package-appimage: _ensure-distdir (build-container appimage_container) _fetch-linuxdeploy && (_clean-image appimage_container) + #!/usr/bin/env bash + echo "=== Building AppImage ===" + staging="$(mktemp -d)" + + tar -xJf "{{builddir}}/meson-dist/map-{{version}}.tar.xz" -C "${staging}/" + cp {{linuxdeploy}} "${staging}/linuxdeploy.AppImage" + + just _run-in-podman "${staging}" {{appimage_container}} " + cd /build/map-{{version}} + meson setup --prefix=/usr {{builddir}} + meson compile -C {{builddir}} + DESTDIR=/build/appdir meson install -C {{builddir}} + cd /build + APPIMAGE_EXTRACT_AND_RUN=1 NO_STRIP=true /build/linuxdeploy.AppImage \ + --appdir=/build/appdir --output=appimage \ + --desktop-file=/build/appdir/usr/share/applications/systems.tranquil.Map.desktop \ + --icon-file=/build/appdir/usr/share/icons/hicolor/scalable/apps/systems.tranquil.Map.svg + mkdir -p /build/out + mv /build/Map*.AppImage /build/out/ + " + mv "${staging}/out/"*.AppImage "{{distdir}}/{{app_name}}-{{architecture}}-{{channel}}.AppImage" + rm -rf "${staging}" # Builds an arch .pkg.tar.gz -package-arch: _ensure_distdir (build-container "arch") dist && (_clean_image "arch") - @echo "=== Building Arch package ({{architecture}}) ===" - ./scripts/build_arch.sh {{container_image_prefix}} arch {{app_name}} {{architecture}} {{channel}} +package-arch: _ensure-distdir (build-container "arch") dist && (_clean-image "arch") + #!/usr/bin/env bash + echo "=== Building Arch package ({{architecture}}) ===" + staging="$(mktemp -d)" + + cp {{builddir}}/meson-dist/map-{{version}}.tar.xz "${staging}/" + cp build-aux/arch/PKGBUILD "${staging}/" + + just _run-in-podman "${staging}" arch " + mkdir -p /tmp/pkg + cp /build/*.tar.xz /tmp/pkg + cp /build/PKGBUILD /tmp/pkg + chown -R builder:builder /tmp/pkg + su builder -c 'cd /tmp/pkg && PKGEXT=.pkg.tar.gz makepkg -f' + mkdir -p /build/out + cp /tmp/pkg/map-{{version}}-1-{{architecture}}.pkg.tar.gz /build/out/ + " + cp "${staging}/out/"*.pkg.tar.gz "{{distdir}}/{{app_name}}-{{architecture}}-{{channel}}-arch.pkg.tar.gz" + rm -rf "${staging}" # Build .rpm for the given distro -package-rpm distro: _ensure_distdir (build-container distro) dist && (_clean_image distro) - @echo "=== Building RPM for {{distro}} ({{architecture}}) ===" - ./scripts/build_rpm.sh {{container_image_prefix}} {{distro}} {{app_name}} {{architecture}} {{channel}} +package-rpm distro: _ensure-distdir (build-container distro) dist && (_clean-image distro) + #!/usr/bin/env bash + echo "=== Building RPM for {{distro}} ({{architecture}}) ===" + staging="$(mktemp -d)" + + cp {{builddir}}/meson-dist/map-{{version}}.tar.xz "${staging}/" + + just vendor "${staging}/vendor" + tar -cJf "${staging}/map-{{version}}-vendor.tar.xz" -C "${staging}" vendor + rm -rf "${staging}/vendor" + + cp build-aux/rpm/map.spec "${staging}/" + + just _run-in-podman "${staging}" {{distro}} " + mkdir -p ~/rpmbuild/{SOURCES,SPECS} + cp /build/map-*.tar.xz ~/rpmbuild/SOURCES/ + cp /build/map.spec ~/rpmbuild/SPECS/ + rpmbuild -bb ~/rpmbuild/SPECS/map.spec + mkdir -p /build/out + cp ~/rpmbuild/RPMS/{{architecture}}/map-{{version}}-1.*.rpm /build/out/ + " + cp "${staging}/out/"*.rpm "{{distdir}}/{{app_name}}-{{architecture}}-{{channel}}-{{distro}}.rpm" + rm -rf "${staging}" # Build .deb for the given distro -package-deb distro: _ensure_distdir (build-container distro) dist && (_clean_image distro) - @echo "=== Building DEB for {{distro}} ({{architecture}}) ===" - ./scripts/build_deb.sh {{container_image_prefix}} {{distro}} {{app_name}} {{architecture}} {{channel}} +package-deb distro: _ensure-distdir (build-container distro) dist && (_clean-image distro) + #!/usr/bin/env bash + echo "=== Building DEB for {{distro}} ({{architecture}}) ===" + staging="$(mktemp -d)" + + cp {{builddir}}/meson-dist/map-{{version}}.tar.xz "${staging}/{{app_name}}_{{version}}.orig.tar.xz" + tar -xJf "${staging}/{{app_name}}_{{version}}.orig.tar.xz" -C "${staging}" + mkdir -p "${staging}/{{app_name}}-{{version}}" + cp -r build-aux/debian "${staging}/{{app_name}}-{{version}}/debian" + + just _run-in-podman "${staging}" {{distro}} " + cd /build/{{app_name}}-{{version}} + dpkg-buildpackage -us -uc -b + mkdir -p /build/out + cp /build/{{app_name}}_{{version}}*_*.deb /build/out/ + " + cp "${staging}/out/"*.deb "{{distdir}}/{{app_name}}-{{architecture}}-{{channel}}-{{distro}}.deb" + rm -rf "${staging}" # Build .rpm for every supported distro package-rpm-all: @@ -130,13 +202,13 @@ package: package-flatpak package-appimage package-arch package-rpm-all package-d # Distribution ################################################################# # Sign and upload flatpak -distribute-flatpak: (_sign_and_upload f"{{distdir}}/{{filename}}.flatpak") +distribute-flatpak: (_sign-and-upload f"{{distdir}}/{{filename}}.flatpak") # Sign and upload AppImage -distribute-appimage: (_sign_and_upload f"{{distdir}}/{{filename}}.AppImage") +distribute-appimage: (_sign-and-upload f"{{distdir}}/{{filename}}.AppImage") # Sign and upload arch .pkg.tar.gz -distribute-arch: (_sign_and_upload f"{{distdir}}/{{filename}}-arch.pkg.tar.gz") +distribute-arch: (_sign-and-upload f"{{distdir}}/{{filename}}-arch.pkg.tar.gz") # Sign and upload .rpm files distribute-rpm: @@ -149,9 +221,9 @@ distribute-deb: # Sign and upload all distributable packages distribute: distribute-flatpak distribute-appimage distribute-arch distribute-rpm distribute-deb -_distribute-rpm distro: (_sign_and_upload f"{{distdir}}/{{filename}}-{{distro}}.rpm") +_distribute-rpm distro: (_sign-and-upload f"{{distdir}}/{{filename}}-{{distro}}.rpm") -_distribute-deb distro: (_sign_and_upload f"{{distdir}}/{{filename}}-{{distro}}.deb") +_distribute-deb distro: (_sign-and-upload f"{{distdir}}/{{filename}}-{{distro}}.deb") # Release ###################################################################### @@ -163,9 +235,9 @@ release: package distribute # Intended to run in CI. Lints and releases. ci: lint #!/usr/bin/env bash - if [[ "$GIT_REF" == "refs/heads/main"]]; then + if [[ "$GIT_REF" == "refs/heads/main" ]]; then just release - elif [[ "$GIT_REF" == "refs/tags/*" ]]; then + elif [[ "$GIT_REF" == refs/tags/* ]]; then just channel="${GIT_REF#refs/tags/}" release else echo "Not in CI environment." @@ -182,10 +254,6 @@ uninstall: # Utility Tasks ################################################################ -# Print the Version -version: - @grep -m1 -o "[^_]version: '[^']*'" meson.build | awk -F"'" '{print $2}' - # Vendor the rust dependencies vendor location: cargo vendor {{location}} >/dev/null @@ -194,32 +262,31 @@ vendor location: # Syncs versions of different files to the meson.build sync-versions: #!/usr/bin/env bash - version=`just version` - echo "Using version from meson.build: ${version}" + echo "Using version from meson.build: {{version}}" # Rust Cargo.toml echo -ne "\tUpdating: Cargo.toml" - sed -i "s/^version = \"[^\"]*\"$/version = \"$version\"/" Cargo.toml + sed -i "s/^version = \"[^\"]*\"$/version = \"{{version}}\"/" Cargo.toml echo -e "\r\tUpdated: Cargo.toml " # Arch PKGBUILD echo -ne "\tUpdating: PKGBUILD" - sed -i "s/^pkgver=.*$/pkgver=$version/" build-aux/arch/PKGBUILD + sed -i "s/^pkgver=.*$/pkgver={{version}}/" build-aux/arch/PKGBUILD echo -e "\r\tUpdated: PKGBUILD " # Fedora RPM Spec echo -ne "\tUpdating: map.spec" - sed -i "s/^Version: .*$/Version: $version/" build-aux/rpm/map.spec + sed -i "s/^Version: .*$/Version: {{version}}/" build-aux/rpm/map.spec echo -e "\r\tUpdated: map.spec " # Internal Tasks ############################################################### # Cleans images if the flag is set (eg. for low-storage environments) -_clean_image image: +_clean-image image: {{ if clean_images != "" { f"podman rmi {{container_image_prefix}}:{{image}}" } else { "" } }} # Ensures distdir exists -_ensure_distdir: +_ensure-distdir: @mkdir -p {{distdir}} # Signs a file @@ -238,4 +305,10 @@ _upload file: rsync -avz {{file}} $DISTRIBUTION_HOST:$DISTRIBUTION_PATH # Sign and upload a file. -_sign_and_upload file: (_sign file channel architecture) (_upload file) +_sign-and-upload file: (_sign file channel architecture) (_upload file) + +# Generic Podman Runner: Run a build script inside a container +_run-in-podman staging tag commands: + podman run --rm -v "{{staging}}:/build:Z" \ + {{container_image_prefix}}:{{tag}} \ + bash -c "{{commands}}" |