Commit 74d42324 authored by Erick Hitter's avatar Erick Hitter
Browse files

Initial commit

parent 735f309f
Pipeline #762 passed with stage
in 1 minute and 9 seconds
stage: test
image: koalaman/shellcheck-alpine:latest
- shellcheck -V
- find scripts -name "*.sh" -exec shellcheck {} \;
# Deploy plugin to
# Plugin Deploy
Deploy plugin updates to's plugin SVN. Modeled on [10up's GitHub action]( of the same intent.
## Configuration
### `.gitlab-ci.yml`
Add the following to the plugin's `.gitlab-ci.yml`:
stage: deploy
- apt-get update
- apt-get install -y rsync
script: ./bin/
when: on_success
While unnecessary, if you'd rather save the time of testing the deploy, append the following to the CI job's configuration:
- master
The above is a time-save only; the build script exits before the `svn commit` stage if the merge isn't into `master`.
### CI Environment Variables
Set the following environment variables in the GitLab project's configuration:
* `PLUGIN_SLUG` - plugin's name on
* `PLUGIN_VERSION` - version to tag
* `WP_ORG_RELEASE_REF` - commit ref (branch or tag) to use for release
#!/usr/bin/env bash
# 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
if [[ -z "$WP_ORG_USERNAME" ]]; then
echo " username not set" 1>&2
exit 1
if [[ -z "$WP_ORG_PASSWORD" ]]; then
echo " password not set" 1>&2
exit 1
if [[ -z "$PLUGIN_SLUG" ]]; then
echo "Plugin's SVN slug is not set" 1>&2
exit 1
if [[ -z "$PLUGIN_VERSION" ]]; then
echo "Plugin's version is not set" 1>&2
exit 1
# 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..."
git config --global ""
git config --global "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
# 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"
# 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
# Stop here unless this is a merge into master.
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
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"
echo "✓ Plugin deployed!"
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment