246 lines
7.1 KiB
Bash
Executable File
246 lines
7.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Prepare Flathub submission for Coop
|
|
# This script:
|
|
# 1. Vendors all Rust dependencies (crates.io + git)
|
|
# 2. Generates release info for metainfo.xml
|
|
# 3. Creates the Flathub manifest (su.reya.coop.yml)
|
|
#
|
|
# Usage: ./script/prepare-flathub [--release-date YYYY-MM-DD]
|
|
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# Configuration
|
|
APP_ID="su.reya.coop"
|
|
APP_NAME="Coop"
|
|
REPO_URL="https://git.reya.su/reya/coop"
|
|
BRANDING_LIGHT="#FFE629"
|
|
BRANDING_DARK="#FFE629"
|
|
|
|
# Parse arguments
|
|
RELEASE_DATE=""
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
--release-date)
|
|
RELEASE_DATE="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
echo "Usage: ${0##*/} [options]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --release-date DATE Release date in YYYY-MM-DD format (default: today)"
|
|
echo " -h, --help Display this help and exit"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown option: $1" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Get version from workspace
|
|
VERSION=$(script/get-crate-version coop)
|
|
if [[ -z "$RELEASE_DATE" ]]; then
|
|
RELEASE_DATE=$(date +%Y-%m-%d)
|
|
fi
|
|
|
|
echo "=== Preparing Flathub submission for $APP_NAME v$VERSION ==="
|
|
echo ""
|
|
|
|
# Create flathub directory
|
|
mkdir -p flathub
|
|
echo "[1/5] Created flathub/ directory"
|
|
|
|
# Step 2: Vendor all dependencies
|
|
echo "[2/5] Vendoring Rust dependencies..."
|
|
if [[ -d vendor ]]; then
|
|
echo " Removing old vendor directory..."
|
|
rm -rf vendor
|
|
fi
|
|
|
|
# Create cargo config for vendoring
|
|
mkdir -p .cargo
|
|
cat > .cargo/config.toml << 'EOF'
|
|
[source.crates-io]
|
|
replace-with = "vendored"
|
|
|
|
[source.vendored]
|
|
directory = "vendor"
|
|
EOF
|
|
|
|
# Vendor all dependencies (crates.io + git)
|
|
cargo vendor --locked vendor/
|
|
echo " Vendored dependencies to vendor/"
|
|
|
|
# Create tarball of vendored deps
|
|
tar -czf flathub/vendor.tar.gz vendor/
|
|
echo " Created flathub/vendor.tar.gz"
|
|
|
|
# Step 3: Generate release info for metainfo
|
|
echo "[3/5] Generating release info..."
|
|
cat > flathub/release-info.xml << EOF
|
|
<release version="${VERSION}" date="${RELEASE_DATE}">
|
|
<description>
|
|
<p>Release version ${VERSION}</p>
|
|
</description>
|
|
</release>
|
|
EOF
|
|
echo " Created flathub/release-info.xml"
|
|
|
|
# Step 4: Generate the metainfo file with release info
|
|
echo "[4/5] Generating metainfo.xml..."
|
|
export APP_ID APP_NAME BRANDING_LIGHT BRANDING_DARK
|
|
cat crates/coop/resources/flatpak/coop.metainfo.xml.in | \
|
|
sed -e "/@release_info@/r flathub/release-info.xml" -e '/@release_info@/d' \
|
|
> flathub/${APP_ID}.metainfo.xml
|
|
echo " Created flathub/${APP_ID}.metainfo.xml"
|
|
|
|
# Step 5: Generate the Flatpak manifest
|
|
echo "[5/5] Generating Flatpak manifest..."
|
|
|
|
# Get current commit hash
|
|
COMMIT=$(git rev-parse HEAD)
|
|
|
|
# Generate the YAML manifest
|
|
cat > flathub/${APP_ID}.yml << 'MANIFEST_EOF'
|
|
id: su.reya.coop
|
|
runtime: org.freedesktop.Platform
|
|
runtime-version: "24.08"
|
|
sdk: org.freedesktop.Sdk
|
|
sdk-extensions:
|
|
- org.freedesktop.Sdk.Extension.rust-stable
|
|
- org.freedesktop.Sdk.Extension.llvm18
|
|
command: coop
|
|
finish-args:
|
|
- --talk-name=org.freedesktop.Flatpak
|
|
- --device=dri
|
|
- --share=ipc
|
|
- --share=network
|
|
- --socket=wayland
|
|
- --socket=fallback-x11
|
|
- --socket=pulseaudio
|
|
- --filesystem=host
|
|
|
|
build-options:
|
|
append-path: /usr/lib/sdk/rust-stable/bin:/usr/lib/sdk/llvm18/bin
|
|
env:
|
|
CC: clang
|
|
CXX: clang++
|
|
|
|
modules:
|
|
- name: coop
|
|
buildsystem: simple
|
|
build-options:
|
|
env:
|
|
CARGO_HOME: /run/build/coop/cargo
|
|
CARGO_NET_OFFLINE: "true"
|
|
RELEASE_VERSION: "@VERSION@"
|
|
build-commands:
|
|
# Setup vendored dependencies
|
|
- mkdir -p .cargo
|
|
- cp cargo-config.toml .cargo/config.toml
|
|
|
|
# Extract vendored deps
|
|
- tar -xzf vendor.tar.gz
|
|
|
|
# Build the project (entire workspace, then install coop binary)
|
|
- cargo build --release --offline --package coop
|
|
|
|
# Install binary
|
|
- install -Dm755 target/release/coop /app/bin/coop
|
|
|
|
# Install icons
|
|
- install -Dm644 crates/coop/resources/icon.png /app/share/icons/hicolor/512x512/apps/su.reya.coop.png
|
|
- install -Dm644 crates/coop/resources/icon@2x.png /app/share/icons/hicolor/1024x1024/apps/su.reya.coop.png
|
|
|
|
# Install desktop file
|
|
- |
|
|
export APP_ID="su.reya.coop"
|
|
export APP_ICON="su.reya.coop"
|
|
export APP_NAME="Coop"
|
|
export APP_CLI="coop"
|
|
export APP_ARGS="%U"
|
|
export DO_STARTUP_NOTIFY="true"
|
|
envsubst < crates/coop/resources/coop.desktop.in > coop.desktop
|
|
install -Dm644 coop.desktop /app/share/applications/su.reya.coop.desktop
|
|
|
|
# Install metainfo (use pre-generated one with release info)
|
|
- install -Dm644 su.reya.coop.metainfo.xml /app/share/metainfo/su.reya.coop.metainfo.xml
|
|
|
|
sources:
|
|
# Main source code - specific commit
|
|
- type: git
|
|
url: https://git.reya.su/reya/coop.git
|
|
commit: "@COMMIT@"
|
|
tag: "v@VERSION@"
|
|
|
|
# Vendored dependencies tarball (generated by this script)
|
|
- type: file
|
|
path: vendor.tar.gz
|
|
sha256: "@VENDOR_SHA256@"
|
|
|
|
# Pre-generated metainfo with release info
|
|
- type: file
|
|
path: su.reya.coop.metainfo.xml
|
|
sha256: "@METAINFO_SHA256@"
|
|
|
|
# Cargo config for vendoring
|
|
- type: file
|
|
path: cargo-config.toml
|
|
sha256: "@CARGO_CONFIG_SHA256@"
|
|
MANIFEST_EOF
|
|
|
|
# Calculate SHA256 hashes
|
|
VENDOR_SHA256=$(sha256sum flathub/vendor.tar.gz | cut -d' ' -f1)
|
|
METAINFO_SHA256=$(sha256sum flathub/${APP_ID}.metainfo.xml | cut -d' ' -f1)
|
|
|
|
# Create cargo-config.toml
|
|
mkdir -p flathub
|
|
cat > flathub/cargo-config.toml << 'EOF'
|
|
[source.crates-io]
|
|
replace-with = "vendored"
|
|
|
|
[source.vendored]
|
|
directory = "vendor"
|
|
EOF
|
|
CARGO_CONFIG_SHA256=$(sha256sum flathub/cargo-config.toml | cut -d' ' -f1)
|
|
|
|
# Substitute values into the manifest
|
|
sed -i \
|
|
-e "s/@VERSION@/${VERSION}/g" \
|
|
-e "s/@COMMIT@/${COMMIT}/g" \
|
|
-e "s/@VENDOR_SHA256@/${VENDOR_SHA256}/g" \
|
|
-e "s/@METAINFO_SHA256@/${METAINFO_SHA256}/g" \
|
|
-e "s/@CARGO_CONFIG_SHA256@/${CARGO_CONFIG_SHA256}/g" \
|
|
flathub/${APP_ID}.yml
|
|
|
|
echo " Created flathub/${APP_ID}.yml"
|
|
|
|
echo ""
|
|
echo "=== Flathub preparation complete! ==="
|
|
echo ""
|
|
echo "Files generated in flathub/:"
|
|
echo " - ${APP_ID}.yml # Main Flatpak manifest (submit this to Flathub)"
|
|
echo " - ${APP_ID}.metainfo.xml # AppStream metadata with release info"
|
|
echo " - vendor.tar.gz # Vendored Rust dependencies"
|
|
echo " - cargo-config.toml # Cargo configuration for vendoring"
|
|
echo " - release-info.xml # Release info snippet"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Test the build locally:"
|
|
echo " cd flathub && flatpak-builder --user --install --force-clean build ${APP_ID}.yml"
|
|
echo ""
|
|
echo " 2. If build succeeds, submit to Flathub:"
|
|
echo " - Fork https://github.com/flathub/flathub"
|
|
echo " - Clone: git clone --branch=new-pr git@github.com:YOUR_USERNAME/flathub.git"
|
|
echo " - Copy ONLY ${APP_ID}.yml to the repo"
|
|
echo " - Submit PR against flathub/flathub:new-pr"
|
|
echo ""
|
|
echo "Note: Make sure you have:"
|
|
echo " - Committed all changes (commit: ${COMMIT})"
|
|
echo " - Tagged the release (tag: v${VERSION})"
|
|
echo " - Pushed the tag to GitHub"
|