Moved: publish-local-gitea-packages.sh → gitea/publish-local-packages.sh publish-outdated-gitea-packages.sh → gitea/publish-outdated-packages.sh release-gitea-packages.sh → gitea/release-packages.sh run-registry-tests.sh → gitea/run-registry-tests.sh harden-publish-config.sh → gitea/harden-publish-config.sh Dropped -gitea- infix (redundant with folder name). Fixed in every moved script: - REPO_ROOT: ../ → ../../ (one level deeper) - Internal cross-reference comments Updated all 10 referencing files: - package.json (release script path) - .gitea/workflows/ci.yml (publish step) - 3 workflow .md files (publish-outdated usage) - 3 devops docs (publish-local + registry-tests refs) - 2 internal comment cross-references
80 lines
2.6 KiB
Bash
80 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
PACKAGES_DIR="$REPO_ROOT/packages"
|
|
TMP_DIR="${TMPDIR:-/tmp}/bytelyst-gitea-publish"
|
|
REGISTRY_URL="${GITEA_NPM_REGISTRY_URL:-https://gitea.bytelyst.com/api/packages/ByteLyst/npm/}"
|
|
AUTH_TARGET="${REGISTRY_URL#http://}"
|
|
AUTH_TARGET="${AUTH_TARGET#https://}"
|
|
TOKEN="${GITEA_NPM_TOKEN:-}"
|
|
PACKAGE_FILTER="${1:-}"
|
|
|
|
if [ -z "$TOKEN" ]; then
|
|
echo "❌ GITEA_NPM_TOKEN is required"
|
|
exit 1
|
|
fi
|
|
|
|
rm -rf "$TMP_DIR"
|
|
mkdir -p "$TMP_DIR"
|
|
|
|
publish_package() {
|
|
local pkg_dir="$1"
|
|
local package_name
|
|
local package_version
|
|
package_name="$(node -e "const fs=require('fs'); const pkg=JSON.parse(fs.readFileSync(process.argv[1], 'utf8')); process.stdout.write(pkg.name);" "$pkg_dir/package.json")"
|
|
package_version="$(node -e "const fs=require('fs'); const pkg=JSON.parse(fs.readFileSync(process.argv[1], 'utf8')); process.stdout.write(pkg.version);" "$pkg_dir/package.json")"
|
|
local safe_name
|
|
safe_name="${package_name//@/}"
|
|
safe_name="${safe_name//\//-}"
|
|
local work_dir="$TMP_DIR/$safe_name-$package_version"
|
|
local packed_tgz
|
|
local final_tgz
|
|
|
|
rm -rf "$work_dir"
|
|
mkdir -p "$work_dir"
|
|
|
|
echo "📦 Packing $package_name@$package_version"
|
|
(
|
|
cd "$pkg_dir"
|
|
pnpm pack --pack-destination "$work_dir" >/dev/null
|
|
)
|
|
|
|
packed_tgz="$(find "$work_dir" -maxdepth 1 -name '*.tgz' | head -1)"
|
|
if [ -z "$packed_tgz" ]; then
|
|
echo "❌ Failed to pack $package_name@$package_version"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$work_dir/unpacked"
|
|
tar -xzf "$packed_tgz" -C "$work_dir/unpacked"
|
|
(
|
|
cd "$work_dir/unpacked/package"
|
|
npm pack --pack-destination "$work_dir" >/dev/null
|
|
)
|
|
|
|
final_tgz="$(find "$work_dir" -maxdepth 1 -name '*.tgz' | sort | tail -1)"
|
|
if [ -z "$final_tgz" ]; then
|
|
echo "❌ Failed to repack $package_name@$package_version"
|
|
exit 1
|
|
fi
|
|
|
|
echo "🚀 Publishing $package_name@$package_version to $REGISTRY_URL"
|
|
if ! npm publish "$final_tgz" \
|
|
--registry "$REGISTRY_URL" \
|
|
--"//${AUTH_TARGET}:_authToken=$TOKEN"; then
|
|
echo "⚠️ Publish failed for $package_name@$package_version (possibly already published)"
|
|
fi
|
|
}
|
|
|
|
while IFS= read -r -d '' pkg_json; do
|
|
pkg_dir="$(dirname "$pkg_json")"
|
|
pkg_name="$(node -e "const fs=require('fs'); const pkg=JSON.parse(fs.readFileSync(process.argv[1], 'utf8')); process.stdout.write(pkg.name);" "$pkg_json")"
|
|
if [ -n "$PACKAGE_FILTER" ] && [ "$pkg_name" != "$PACKAGE_FILTER" ]; then
|
|
continue
|
|
fi
|
|
publish_package "$pkg_dir"
|
|
done < <(find "$PACKAGES_DIR" -mindepth 2 -maxdepth 2 -name package.json -print0 | sort -z)
|
|
|
|
echo "✅ Local Gitea package publish complete"
|