#!/usr/bin/env bash # designpaca 패키지를 npmjs 에 배포하고 Forgejo 사설 레지스트리에 미러링한다. # # 필요 환경: # NPM_TOKEN npmjs 자동화 토큰 (필수) # FORGEJO_NPM_TOKEN Forgejo 개인 액세스 토큰 (선택 — 없으면 미러를 건너뛴다) # FORGEJO_NPM_OWNER Forgejo 패키지 소유자 (기본: yunchan) # GITHUB_SERVER_URL Forgejo 주소 (Actions 가 준다) # # 이미 배포된 버전이면 조용히 건너뛴다 — 워크플로 재실행이 실패로 끝나지 않게. set -euo pipefail PKG_DIR="${1:-packages/cli}" cd "$PKG_DIR" name="$(node -p 'require("./package.json").name')" version="$(node -p 'require("./package.json").version')" echo "배포 대상: ${name}@${version}" published() { # npm view "${name}@${version}" version --registry "$1" >/dev/null 2>&1 } # ── 1) npmjs ── if [ -z "${NPM_TOKEN:-}" ]; then echo "NPM_TOKEN 이 없다 — npmjs 배포를 건너뛴다" >&2 else npmrc="$(mktemp)" echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > "$npmrc" export NPM_CONFIG_USERCONFIG="$npmrc" if published "https://registry.npmjs.org/"; then echo "npmjs: ${version} 은 이미 배포돼 있다 — 건너뛴다" else npm publish --access public --registry "https://registry.npmjs.org/" --provenance=false echo "npmjs 배포 완료: ${name}@${version}" fi rm -f "$npmrc" unset NPM_CONFIG_USERCONFIG fi # ── 2) Forgejo 미러 ── if [ -z "${FORGEJO_NPM_TOKEN:-}" ]; then echo "FORGEJO_NPM_TOKEN 이 없다 — 사설 레지스트리 미러를 건너뛴다" exit 0 fi owner="${FORGEJO_NPM_OWNER:-yunchan}" server="${GITHUB_SERVER_URL:-https://git.chanpaca.net}" host="${server#*://}"; host="${host%/}" registry="${server%/}/api/packages/${owner}/npm/" npmrc="$(mktemp)" { echo "registry=${registry}" # 스킴을 뺀 형태로 적어야 Forgejo 가 인증을 인식한다 echo "//${host}/api/packages/${owner}/npm/:_authToken=${FORGEJO_NPM_TOKEN}" } > "$npmrc" export NPM_CONFIG_USERCONFIG="$npmrc" if published "$registry"; then echo "Forgejo: ${version} 은 이미 미러돼 있다 — 건너뛴다" else npm publish --registry "$registry" echo "Forgejo 미러 완료: ${registry}" fi rm -f "$npmrc"