From 44aba703600d4728a96d9a784015b95f09402157 Mon Sep 17 00:00:00 2001
From: Erick Hitter <git-contrib@ethitter.com>
Date: Sat, 13 Apr 2019 18:17:20 -0700
Subject: [PATCH] Move script to shared resource

---
 bin/deploy.sh | 128 ++++----------------------------------------------
 1 file changed, 9 insertions(+), 119 deletions(-)

diff --git a/bin/deploy.sh b/bin/deploy.sh
index 1339961..3c4cd5c 100755
--- a/bin/deploy.sh
+++ b/bin/deploy.sh
@@ -1,130 +1,20 @@
 #!/usr/bin/env bash
 
-## MIT License
-##
-## Copyright (c) 2019 Helen Hou-Sandi
-## Copyright (c) 2019 Erick Hitter
-##
-## Permission is hereby granted, free of charge, to any person obtaining a copy
-## of this software and associated documentation files (the "Software"), to deal
-## in the Software without restriction, including without limitation the rights
-## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-## copies of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be included in all
-## copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-## SOFTWARE.
-
 # Note that this does not use pipefail
 # because if the grep later doesn't match any deleted files,
 # which is likely the majority case,
 # it does not exit with a 0, and I only care about the final exit.
 set -eo
 
-# Ensure SVN username and password are set
-# IMPORTANT: while secrets are encrypted and not viewable in the GitHub UI,
-# they are by necessity provided as plaintext in the context of the Action,
-# so do not echo or use debug mode unless you want your secrets exposed!
-if [[ -z "$CI" ]]; then
-	echo "Script is only to be run by GitLab CI" 1>&2
-	exit 1
-fi
-
-if [[ -z "$WP_ORG_USERNAME" ]]; then
-	echo "WordPress.org username not set" 1>&2
-	exit 1
-fi
-
-if [[ -z "$WP_ORG_PASSWORD" ]]; then
-	echo "WordPress.org password not set" 1>&2
-	exit 1
-fi
-
-if [[ -z "$PLUGIN_SLUG" ]]; then
-	echo "Plugin's SVN slug is not set" 1>&2
-	exit 1
-fi
-
-if [[ -z "$PLUGIN_VERSION" ]]; then
-	echo "Plugin's version is not set" 1>&2
-	exit 1
-fi
-
-echo "ℹ︎ PLUGIN_SLUG is $PLUGIN_SLUG"
-echo "ℹ︎ PLUGIN_VERSION is $PLUGIN_VERSION"
-
-SVN_URL="https://plugins.svn.wordpress.org/${PLUGIN_SLUG}/"
-SVN_DIR="$CI_BUILDS_DIR/svn-${PLUGIN_SLUG}"
-TMP_DIR="$CI_BUILDS_DIR/git-archive"
-
-# Checkout just trunk for efficiency
-# Tagging will be handled on the SVN level
-echo "➤ Checking out .org repository..."
-svn checkout --depth immediates "$SVN_URL" "$SVN_DIR"
-cd "$SVN_DIR"
-svn update --set-depth infinity trunk
-
-# Ensure we are in the $CI_PROJECT_DIR directory, just in case
-echo "➤ Copying files..."
-cd "$CI_PROJECT_DIR"
-
-git config --global user.email "git-contrib+ci@ethitter.com"
-git config --global user.name "Erick Hitter (GitLab CI)"
-
-# If there's no .gitattributes file, write a default one into place
-if [[ ! -e "$CI_PROJECT_DIR/.gitattributes" ]]; then
-	cat > "$CI_PROJECT_DIR/.gitattributes" <<-EOL
-	/.gitattributes export-ignore
-	/.gitignore export-ignore
-	/.github export-ignore
-	EOL
-
-	# The .gitattributes file has to be committed to be used
-	# Just don't push it to the origin repo :)
-	git add .gitattributes && git commit -m "Add .gitattributes file"
-fi
-
-# This will exclude everything in the .gitattributes file with the export-ignore flag
-mkdir "$TMP_DIR"
-git archive HEAD | tar x --directory="$TMP_DIR"
-
-cd "$SVN_DIR"
-
-# Copy from clean copy to /trunk
-# The --delete flag will delete anything in destination that no longer exists in source
-rsync -r "$TMP_DIR/" trunk/ --delete
-
-# Add everything and commit to SVN
-# The force flag ensures we recurse into subdirectories even if they are already added
-# Suppress stdout in favor of svn status later for readability
-echo "➤ Preparing files..."
-svn add . --force > /dev/null
-
-# SVN delete all deleted files
-# Also suppress stdout here
-svn status | grep '^\!' | sed 's/! *//' | xargs -I% svn rm % > /dev/null
-
-# Copy tag locally to make this a single commit
-echo "➤ Copying tag..."
-svn cp "trunk" "tags/$PLUGIN_VERSION"
-
-svn status
+# Download shared script and execute.
+# See https://git.ethitter.com/open-source/wp-org-plugin-deploy/blob/master/README.md
+DEPLOY_SCRIPT_SRC="https://git.ethitter.com/open-source/wp-org-plugin-deploy/raw/master/scripts/deploy.sh"
+DEPLOY_SCRIPT_NAME="deploy-wp-org.sh"
 
-# Stop here unless this is a merge into master.
-if [[ -z "$CI_COMMIT_REF_NAME" || -z "$WP_ORG_RELEASE_TAG" || "$CI_COMMIT_REF_NAME" != "$WP_ORG_RELEASE_TAG" ]]; then
-	echo "𝘅︎ EXITING before commit step as this is the '${CI_COMMIT_REF_NAME}' ref, not the '${WP_ORG_RELEASE_TAG}' ref." 1>&2
-	exit 0
-fi
+echo "ℹ︎ Downloading script from $DEPLOY_SCRIPT_SRC"
 
-echo "➤ Committing files..."
-svn commit -m "Update to version ${PLUGIN_VERSION} from GitLab (${CI_PROJECT_URL}; ${CI_JOB_URL})" --no-auth-cache --non-interactive  --username "$WP_ORG_USERNAME" --password "$WP_ORG_PASSWORD"
+curl -o "./${DEPLOY_SCRIPT_NAME}" "$DEPLOY_SCRIPT_SRC"
+chmod +x "./${DEPLOY_SCRIPT_NAME}"
 
-echo "✓ Plugin deployed!"
+echo "ℹ︎ Running $DEPLOY_SCRIPT_NAME"
+bash "./${DEPLOY_SCRIPT_NAME}"
-- 
GitLab