From e45fb9b4fd625d8f39abbef78d2b9d3193876e48 Mon Sep 17 00:00:00 2001 From: brasse Date: Sat, 4 Jul 2026 14:38:27 +0200 Subject: [PATCH] Add one-line installer + install.sh, richer release notes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit install.sh detects arch, downloads the latest binary and installs it to PATH (like a `curl … | sh` installer). The release workflow now ships install.sh as an asset and PATCHes the release body with the one-line install command, so the release page shows how to install with a single command. README/wiki updated. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_011YPrEZVBpPVoCRyJz2exkZ --- .gitea/workflows/release.yaml | 25 +++++++++-- README.md | 13 ++++-- install.sh | 79 +++++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 7 deletions(-) create mode 100644 install.sh diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 37fb060..97e77fe 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -63,8 +63,9 @@ jobs: cargo build --release --target x86_64-unknown-linux-gnu cp target/x86_64-unknown-linux-gnu/release/npmctl dist/npmctl-linux-x64 + cp install.sh dist/install.sh cd dist - sha256sum npmctl-linux-* > checksums.txt + sha256sum npmctl-linux-* install.sh > checksums.txt ls -la - name: Skapa Gitea-release + ladda upp assets @@ -76,11 +77,27 @@ jobs: run: | set -eu B=dist - BODY="npmctl $TAG — CLI för Nginx Proxy Manager (linux x64/arm64). Se wiki: https://gitea.brasse-pc.eu/brasse/Npm-cli/wiki" - rid=$(curl -s -X POST "$API/repos/$REPO/releases" -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' -d "{\"tag_name\":\"$TAG\",\"name\":\"$TAG\",\"body\":\"$BODY\"}" | jq -r '.id // empty') + BODY=$(cat <<'MD' +`npmctl` — CLI för Nginx Proxy Manager (NPM) med sudo-liknande token-auth (lösenordet sparas aldrig, bara en kortlivad token) och en generisk `api`-funktion för vilket HTTP-API som helst. + +**Installera (en rad):** +``` +curl -fsSL https://gitea.brasse-pc.eu/brasse/Npm-cli/raw/branch/main/install.sh | sh +``` + +Eller ladda ner rätt binär nedan (`npmctl-linux-x64` / `npmctl-linux-arm64`), `chmod +x` och lägg i PATH. Verifiera mot `checksums.txt`. + +📖 Guide: https://gitea.brasse-pc.eu/brasse/Npm-cli/wiki +MD +) + payload=$(jq -n --arg tag "$TAG" --arg body "$BODY" '{tag_name:$tag,name:$tag,body:$body}') + rid=$(curl -s -X POST "$API/repos/$REPO/releases" -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' -d "$payload" | jq -r '.id // empty') [ -z "$rid" ] && rid=$(curl -s "$API/repos/$REPO/releases/tags/$TAG" -H "Authorization: token $TOKEN" | jq -r '.id') echo "release id: $rid" - for f in npmctl-linux-x64 npmctl-linux-arm64 checksums.txt; do + # Uppdatera namn/beskrivning även om releasen redan fanns (rullande 'latest'). + curl -s -X PATCH "$API/repos/$REPO/releases/$rid" -H "Authorization: token $TOKEN" -H 'Content-Type: application/json' \ + -d "$(jq -n --arg tag "$TAG" --arg body "$BODY" '{name:$tag,body:$body}')" -o /dev/null + for f in npmctl-linux-x64 npmctl-linux-arm64 install.sh checksums.txt; do aid=$(curl -s "$API/repos/$REPO/releases/$rid/assets" -H "Authorization: token $TOKEN" | jq -r ".[] | select(.name==\"$f\") | .id") if [ -n "$aid" ] && [ "$aid" != "null" ]; then echo "ersätter befintlig $f (id $aid)" diff --git a/README.md b/README.md index be63e32..ff41586 100644 --- a/README.md +++ b/README.md @@ -11,12 +11,19 @@ lösenordet sparas aldrig. 👉 **Användning och alla kommandon:** se [wiki:n](https://gitea.brasse-pc.eu/brasse/Npm-cli/wiki). -## Installera (färdig binär) +## Installera -Hämta senaste binär från [releases](https://gitea.brasse-pc.eu/brasse/Npm-cli/releases): +En rad (hämtar senaste binär för din arkitektur och lägger den i PATH): + +```sh +curl -fsSL https://gitea.brasse-pc.eu/brasse/Npm-cli/raw/branch/main/install.sh | sh +``` + +Miljövariabler: `NPMCTL_INSTALL_DIR` (installkatalog), `NPMCTL_VERSION` (release-tag). + +Eller manuellt från [releases](https://gitea.brasse-pc.eu/brasse/Npm-cli/releases): ```sh -# välj arkitektur: x64 eller arm64 curl -fsSL -o npmctl https://gitea.brasse-pc.eu/brasse/Npm-cli/releases/download/latest/npmctl-linux-x64 chmod +x npmctl && sudo mv npmctl /usr/local/bin/ npmctl --help diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..d0f03b5 --- /dev/null +++ b/install.sh @@ -0,0 +1,79 @@ +#!/bin/sh +# npmctl-installerare — hämtar senaste binär och lägger den i PATH med ETT kommando: +# +# curl -fsSL https://gitea.brasse-pc.eu/brasse/Npm-cli/raw/branch/main/install.sh | sh +# +# Miljövariabler: +# NPMCTL_INSTALL_DIR installationskatalog (standard: /usr/local/bin, annars ~/.local/bin) +# NPMCTL_VERSION release-tag att hämta (standard: latest) +set -eu + +REPO="https://gitea.brasse-pc.eu/brasse/Npm-cli" +VERSION="${NPMCTL_VERSION:-latest}" +BIN="npmctl" + +info() { printf '\033[1;34m==>\033[0m %s\n' "$*"; } +err() { printf '\033[1;31mfel:\033[0m %s\n' "$*" >&2; exit 1; } + +# --- OS/arch --- +[ "$(uname -s)" = "Linux" ] || err "endast Linux stöds (hittade $(uname -s))" +case "$(uname -m)" in + x86_64|amd64) ASSET="npmctl-linux-x64" ;; + aarch64|arm64) ASSET="npmctl-linux-arm64" ;; + *) err "arkitektur stöds ej: $(uname -m)" ;; +esac + +# --- verktyg --- +if command -v curl >/dev/null 2>&1; then DL="curl -fsSL -o"; else + command -v wget >/dev/null 2>&1 || err "behöver curl eller wget" + DL="wget -qO" +fi + +# --- installationskatalog --- +DEST="${NPMCTL_INSTALL_DIR:-}" +if [ -z "$DEST" ]; then + if [ "$(id -u)" -eq 0 ] || [ -w /usr/local/bin ]; then + DEST="/usr/local/bin" + else + DEST="$HOME/.local/bin" + fi +fi +mkdir -p "$DEST" 2>/dev/null || true + +URL="$REPO/releases/download/$VERSION/$ASSET" +TMP="$(mktemp)" +trap 'rm -f "$TMP"' EXIT + +info "Hämtar $ASSET ($VERSION) …" +$DL "$TMP" "$URL" || err "nedladdning misslyckades: $URL" +chmod +x "$TMP" + +# --- placera binären (med sudo vid behov) --- +TARGET="$DEST/$BIN" +if mv "$TMP" "$TARGET" 2>/dev/null; then + : +elif command -v sudo >/dev/null 2>&1; then + info "Behöver rättigheter för $DEST — använder sudo" + sudo mv "$TMP" "$TARGET" && sudo chmod +x "$TARGET" +else + err "kan inte skriva till $DEST (kör som root, använd sudo, eller sätt NPMCTL_INSTALL_DIR)" +fi +trap - EXIT + +info "Installerat: $TARGET" +"$TARGET" --version || true + +case ":$PATH:" in + *":$DEST:"*) ;; + *) info "OBS: $DEST ligger inte i PATH. Lägg till: export PATH=\"$DEST:\$PATH\"" ;; +esac + +cat <