diff --git a/.gitea/workflows/publish-deb.yml b/.gitea/workflows/publish-deb.yml index 15bd430..3721dfc 100644 --- a/.gitea/workflows/publish-deb.yml +++ b/.gitea/workflows/publish-deb.yml @@ -58,7 +58,7 @@ jobs: CREATE_DEB_ARGS+=("--deb-version" "${{ inputs.deb_version }}") fi - ./create-deb.sh "${CREATE_DEB_ARGS[@]}" + ./scripts/create-deb.sh "${CREATE_DEB_ARGS[@]}" - name: Upload deb package artifact uses: actions/upload-artifact@v3 diff --git a/docs/compiling.md b/docs/compiling.md index e64555a..77006e3 100644 --- a/docs/compiling.md +++ b/docs/compiling.md @@ -59,7 +59,7 @@ Before running this, you will need to install `cargo-deb` and make sure you have cargo install cargo-deb # Run the script to create the deb package -./create-deb.sh +./scripts/create-deb.sh # Inspect the resulting deb package dpkg --contents target/debian/muscl_*.deb diff --git a/create-deb.sh b/scripts/create-deb.sh similarity index 100% rename from create-deb.sh rename to scripts/create-deb.sh diff --git a/scripts/download-and-upload-debs.sh b/scripts/download-and-upload-debs.sh new file mode 100755 index 0000000..bc9e309 --- /dev/null +++ b/scripts/download-and-upload-debs.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +set -euo pipefail + +if [[ "${CREATE_DEB_DEBUG:-}" == "1" ]]; then + set -x +fi + +declare -a COMMANDS=( + curl + unzip + mktemp + find +) + +for cmd in "${COMMANDS[@]}"; do + if ! command -v "$cmd" &> /dev/null; then + echo "$cmd could not be found" >&2 + exit 1 + fi +done + +if [ "$#" -ne 2 ]; then + echo "Usage: $0 " >&2 + echo "Example:" >&2 + echo " GITEA_USER=me GITEA_TOKEN=secret ./scripts/download-and-upload-debs.sh 123 \$(git rev-parse HEAD)" >&2 + exit 1 +fi + +if [ -z "${GITEA_USER:-}" ]; then + echo "GITEA_USER is not set" >&2 + exit 1 +fi + +if [ -z "${GITEA_TOKEN:-}" ]; then + echo "GITEA_TOKEN is not set" >&2 + exit 1 +fi + +declare -r RUN_NUMBER="$1" +declare -r GIT_SHA="$2" + +TMPDIR="$(mktemp -d)" + +for variant in debian-bookworm debian-trixie ubuntu-jammy ubuntu-noble; do + echo "Downloading and uploading debs for variant: $variant" + curl "https://git.pvv.ntnu.no/Projects/muscl/actions/runs/$RUN_NUMBER/artifacts/muscl-deb-$variant-$GIT_SHA.zip" --output "$TMPDIR/muscl-deb-$variant-$GIT_SHA.zip" + + unzip "$TMPDIR/muscl-deb-$variant-$GIT_SHA.zip" -d "$TMPDIR/muscl-deb-$variant-$GIT_SHA" + + DISTRO_VERSION_NAME="$(echo "$variant" | cut -d'-' -f2)" + + DEB_NAME=$(find "$TMPDIR/muscl-deb-$variant-$GIT_SHA"/*.deb -print0 | xargs -0 -n1 basename | cut -d'_' -f1 | head -n1) + DEB_VERSION=$(find "$TMPDIR/muscl-deb-$variant-$GIT_SHA"/*.deb -print0 | xargs -0 -n1 basename | cut -d'_' -f2 | head -n1) + DEB_ARCH=$(find "$TMPDIR/muscl-deb-$variant-$GIT_SHA"/*.deb -print0 | xargs -0 -n1 basename | cut -d'_' -f3 | cut -d'.' -f1 | head -n1) + + curl \ + -X DELETE \ + --user "$GITEA_USER:$GITEA_TOKEN" \ + "https://git.pvv.ntnu.no/api/packages/Projects/debian/pool/$DISTRO_VERSION_NAME/main/$DEB_NAME/$DEB_VERSION/$DEB_ARCH" + + curl \ + -X PUT \ + --user "$GITEA_USER:$GITEA_TOKEN" \ + --upload-file "$TMPDIR/muscl-deb-$variant-$GIT_SHA/${DEB_NAME}_${DEB_VERSION}_${DEB_ARCH}.deb" \ + "https://git.pvv.ntnu.no/api/packages/Projects/debian/pool/$DISTRO_VERSION_NAME/main/upload" +done + +rm -rf "$TMPDIR"