apk add curl git git-lfs icu-data-full jq npm uuidgen sed >/dev/null git config --global http.sslVerify false git config --global advice.detachedHead false Repo_Process() { # Prepare Variables local UUID=$(uuidgen) local WORK_ROOT=$1 local REPO_SETTING=$2 local ADDR=$(echo $REPO_SETTING | jq -r '.addr') local DIR=$(echo $REPO_SETTING | jq -r '.dir') local TAG_REGEX=$(echo $REPO_SETTING | jq -r '.tagRegex') local IGNORE_REPO=$(echo $REPO_SETTING | jq -r '.ignore') local REPO_NAME=$(basename $ADDR | sed 's/\.[^\.]*$//') local AUTHOR_NAME=$(echo "$ADDR" | awk -F[/:] '{print $(NF-1)}') local PACKAGE_NAME=$(basename $DIR) local PACKAGE_ROOT="$WORK_ROOT/$REPO_NAME-$UUID" local PACKAGE_DIR="$WORK_ROOT/$REPO_NAME-$UUID/$DIR" # Check if ignore if [[ "$IGNORE_REPO" == "true" ]]; then return fi if [[ "$TAG_REGEX" == null ]]; then local TAG_REGEX="^[0-9]+\.[0-9]+\.[0-9]+$" fi if [[ "$DIR" == null ]]; then local DIR="." fi # Download latest version cd $WORK_ROOT git clone $ADDR $REPO_NAME-$UUID >/dev/null 2>&1 cd $PACKAGE_ROOT local TAGS=$(git tag -l --sort authordate) # Tag Process for TAG in $TAGS; do # Check if tag is valid if [[ ! $TAG =~ $TAG_REGEX ]]; then echo "$REPO_NAME:$DIR@$TAG is invalid tag." continue fi # Prepare Variables local GITHUB_PACKAGE_ADDR="https://raw.githubusercontent.com/${AUTHOR_NAME}/${REPO_NAME}/${TAG}/${DIR}/package.json" # 404 Check local GITHUB_STAT=$(curl -sL $GITHUB_PACKAGE_ADDR -o /dev/null -w '%{http_code}\n') if [[ "$GITHUB_STAT" != "200" ]]; then echo "$REPO_NAME:$DIR@$TAG has invalid path." continue fi local PACKAGE_JSON=$(curl -sL $GITHUB_PACKAGE_ADDR) local GITHUB_NAME=$(echo "$PACKAGE_JSON" | jq -r .name) local SEM_VERSION=$(echo "$TAG" | grep -Eo '[0-9]+\.[0-9]+\.[0-9]+') # Get Server tag local SVR_STAT=$(curl -sL https://$NPM_REGISTRY/$GITHUB_NAME -o /dev/null -w '%{http_code}\n') local SVR_VERS="" if [[ "$SVR_STAT" == "200" ]]; then local SVR_DATA=$(curl -sL https://$NPM_REGISTRY/$GITHUB_NAME) local SVR_VERS=$(echo $SVR_DATA | jq .versions | jq -s -r '[ .[] | keys ] | flatten | unique | .[]') fi # Check server version local EXIST_ON_SVR="false" for SVR_VER in $SVR_VERS; do if [[ "$SVR_VER" == "$SEM_VERSION" ]]; then local EXIST_ON_SVR="true" break fi done if [[ "$EXIST_ON_SVR" == "true" ]]; then echo "$REPO_NAME:$DIR@$TAG is already published." continue fi # Download Repository cd $WORK_ROOT rm -r $PACKAGE_ROOT git clone -b $TAG $ADDR $REPO_NAME-$UUID >/dev/null 2>&1 cd $PACKAGE_ROOT git submodule update --init --recursive >/dev/null 2>&1 git lfs pull >/dev/null 2>&1 cd $PACKAGE_DIR # Change Version local PROCESS_VER='.version="'$SEM_VERSION'"' local PACKAGE_JSON=$(echo "$PACKAGE_JSON" | jq "$PROCESS_VER" | jq -c .) # Update package.json rm package.json echo $PACKAGE_JSON >package.json # Publish Package local DATA='{"name":"'"$NPM_USER"'", "password":"'"$NPM_PASS"'"}' local USER="$NPM_USER":"$NPM_PASS" local RETURN=$(curl -sL -H "Accept:application/json" -H "Content-Type:application/json" -X PUT --data "$DATA" --user "$USER" https://$NPM_REGISTRY/-/user/org.couchdb.user:$NPM_USER) local TOKEN=$(echo $RETURN | jq '.token') npm set //$NPM_REGISTRY/:_authToken $TOKEN npm publish --registry https://$NPM_REGISTRY/ >/dev/null 2>&1 if [[ $? -ne 0 ]]; then echo "$REPO_NAME:$DIR@$TAG failed to publish." else echo "$REPO_NAME:$DIR@$TAG published." fi done cd $WORK_ROOT rm -r $PACKAGE_ROOT } JSON_FILES=$(find ./repos -name "*.json") for JSON_FILE in $JSON_FILES; do ROOT=$(pwd) OBJ=$(cat $JSON_FILE | jq -c .) Repo_Process "$ROOT" "$OBJ" & done wait