apk add curl git git-lfs icu-data-full jq npm uuidgen > /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 ITEM=$2 local ADDRBASE=$(echo $ITEM | jq -r '.addr') local DIR=$(echo $ITEM | jq -r '.dir') local NAME=$(echo $ITEM | jq -r '.name') local AUTH=$(echo $ITEM | jq -r '.author') local DISP=$(echo $ITEM | jq -r '.displayName') local DESC=$(echo $ITEM | jq -r '.description') local TAG_REGEX=$(echo $ITEM | jq -r '.tagRegex') local WORK_DIR=$(basename $ADDRBASE | sed 's/\.[^\.]*$//') local GITLABX="oauth2:glpat-$GITLABTOKEN" local ADDR=${ADDRBASE/GITLAB/$GITLABX} local PACKAGE_ROOT="$WORK_ROOT/$WORK_DIR-$UUID" local PACKAGE_DIR="$WORK_ROOT/$WORK_DIR-$UUID/$DIR" local PACKAGE_PATH="$PACKAGE_DIR/package.json" 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 echo $ADDR git clone $ADDR $WORK_DIR-$UUID 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 "$TAG is valid tag." else echo "$TAG is not valid tag." continue fi cd $WORK_ROOT rm -r $PACKAGE_ROOT git clone -b $TAG $ADDR $WORK_DIR-$UUID cd $PACKAGE_ROOT git submodule update --init --recursive git lfs pull # Check if package.json is exists if [ ! -e $PACKAGE_PATH ]; then echo "$PACKAGE_PATH does not exist." continue fi cd $PACKAGE_DIR # Load Package.json local PACKAGE=$(cat package.json) # Change Name if [[ "$NAME" != null ]]; then local PROCESS_NAME='.name|="'$NAME'"' local PACKAGE=$(echo $PACKAGE | jq "$PROCESS_NAME" | jq -c .) fi # Change Author if [[ "$AUTH" != null ]]; then local PROCESS_AUTH='.author|="'$AUTH'"' local PACKAGE=$(echo $PACKAGE | jq "$PROCESS_AUTH" | jq -c .) fi # Change DisplayName if [[ "$DISP" != null ]]; then local PROCESS_DISP='.displayName|="'$DISP'"' local PACKAGE=$(echo $PACKAGE | jq "$PROCESS_DISP" | jq -c .) fi # Change Description if [[ "$DESC" != null ]]; then local PROCESS_DESC='.description|="'$DESC'"' local PACKAGE=$(echo $PACKAGE | jq "$PROCESS_DESC" | jq -c .) fi # Update package.json rm package.json echo $PACKAGE >package.json local PACKAGE_NAME=$(cat $PACKAGE_PATH | jq -r .name) local PACKAGE_VERSION=$(cat $PACKAGE_PATH | jq -r .version) local PACKAGE_AUTHOR=$(cat $PACKAGE_PATH | jq -r .author) if [[ "$PACKAGE_AUTHOR" == null ]]; then echo "Package $PACKAGE_NAME@$PACKAGE_VERSION has invalie author." continue fi # Check Readme if [ ! -e "$PACKAGE_DIR/README.md" ]; then if [ -e "$PACKAGE_ROOT/README.md" ]; then cp "$PACKAGE_ROOT/README.md" "$PACKAGE_DIR/README.md" META=" fileFormatVersion: 2 guid: ${UUID//-/} TextScriptImporter: externalObjects: {} userData: assetBundleName: assetBundleVariant: " echo "$META" > "$PACKAGE_DIR/README.md.meta" echo "README.md at root was copied." fi fi # Get Server tag local SVR_STAT=$(curl -sL https://$NPM_REGISTRY/$PACKAGE_NAME -o /dev/null -w '%{http_code}\n') local SVR_VERS="" if [[ "$SVR_STAT" == "200" ]]; then local SVR_DATA=$(curl -sL https://$NPM_REGISTRY/$PACKAGE_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" == "$PACKAGE_VERSION" ]]; then local EXIST_ON_SVR="true" break fi done if [[ "$EXIST_ON_SVR" == "true" ]]; then echo "Package $PACKAGE_NAME@$PACKAGE_VERSION is already exist." continue fi echo "Package $PACKAGE_NAME@$PACKAGE_VERSION will be published." # 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/ 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