From 635e97006356098d51c18ae3a034bb931e7f3d2b Mon Sep 17 00:00:00 2001 From: Erick Hitter <git-contrib@ethitter.com> Date: Sun, 14 Apr 2019 08:48:52 -0700 Subject: [PATCH] Add support for WP.org's static assets --- README.md | 12 +++++++++++- scripts/deploy.sh | 34 ++++++++++++++++++++++++---------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index b245fc2..bc49bdf 100644 --- a/README.md +++ b/README.md @@ -40,8 +40,9 @@ Set the following environment variables in the GitLab project's configuration: * `PLUGIN_SLUG` - plugin's name on WordPress.org * `PLUGIN_VERSION` - version to tag * `WP_ORG_RELEASE_REF` - git commit ref (branch or tag) to use for release +* `WP_ORG_ASSETS_DIR` - directory name, relative to repo root, where screenshots and other static assets are held -### Alternatives +### Alternate loading method A [loader script](./scripts/loader.sh) is available as an alternative to downloading the deploy script during the `before_script` stage. @@ -56,6 +57,15 @@ A sample is provided in [examples/gitattributes](./examples/gitattributes). If u /.gitattributes export-ignore ``` +## Deploying assets for WordPress.org + +WordPress.org's plugins directory allows plugins to provide various static assets, which are not bundled in the downloadable plugin, rather only being used to enhance the visitor experience when browsing plugins. More details can be found at [https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/](https://developer.wordpress.org/plugins/wordpress-org/plugin-assets/). + +As the SVN `assets` directory exists outside of the directories used for plugin files, the handling of static assets in git requires a small bit of setup: + +1. In the repository root, create a directory named `.wordpress-org`; alternatively, specify a custom path using the `WP_ORG_ASSETS_DIR` environment variable. +1. Commit to the `WP_ORG_ASSETS_DIR` directory in git any screenshots or other static assets that should be added to the plugin's `assets` directory in SVN. + ## Protecting deploys Choose a `WP_ORG_RELEASE_REF` value that starts with a consistent prefix. Doing so allows that prefix to be protected using GitLab's "Protected Branches" or "Protected Tags" features. diff --git a/scripts/deploy.sh b/scripts/deploy.sh index f185418..1839d5e 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -6,38 +6,47 @@ # 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! +# Provide a basic version identifier, particularly since this script +# is usually accessed via CDN. +echo "ℹ︎ WP-ORG-PLUGIN-DEPLOY VERSION: 2019041401" + if [[ -z "$CI" ]]; then - echo "Script is only to be run by GitLab CI" 1>&2 + echo "ð˜…︎ Script is only to be run by GitLab CI" 1>&2 exit 1 fi +# Ensure certain environment variables are set +# IMPORTANT: while access to secrets is restricted in the GitLab UI, +# they are by necessity provided as plaintext in the context of this script, +# so do not echo or use debug mode unless you want your secrets exposed! if [[ -z "$WP_ORG_USERNAME" ]]; then - echo "WordPress.org username not set" 1>&2 + 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 + 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 + 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 + echo "ð˜…︎ Plugin's version is not set" 1>&2 exit 1 fi +if [[ -z "$WP_ORG_ASSETS_DIR" ]]; then + WP_ORG_ASSETS_DIR=".wordpress-org" +fi + echo "ℹ︎ PLUGIN_SLUG: $PLUGIN_SLUG" echo "ℹ︎ PLUGIN_VERSION: $PLUGIN_VERSION" echo "ℹ︎ WP_ORG_RELEASE_REF: $WP_ORG_RELEASE_REF" +echo "ℹ︎ WP_ORG_ASSETS_DIR: $WP_ORG_ASSETS_DIR" SVN_URL="https://plugins.svn.wordpress.org/${PLUGIN_SLUG}/" SVN_DIR="$CI_BUILDS_DIR/svn-${PLUGIN_SLUG}" @@ -47,6 +56,7 @@ TMP_DIR="$CI_BUILDS_DIR/git-archive" echo "➤ Checking out dotorg repository..." svn checkout --depth immediates "$SVN_URL" "$SVN_DIR" cd "$SVN_DIR" +svn update --set-depth infinity assets svn update --set-depth infinity trunk svn update --set-depth infinity "tags/${PLUGIN_VERSION}" @@ -60,9 +70,10 @@ 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 + /${WP_ORG_ASSETS_DIR} export-ignore /.gitattributes export-ignore /.gitignore export-ignore - /.github export-ignore + /.gitlab-ci.yml export-ignore EOL # The .gitattributes file has to be committed to be used @@ -80,6 +91,9 @@ cd "$SVN_DIR" # The --delete flag will delete anything in destination that no longer exists in source rsync -r "$TMP_DIR/" trunk/ --delete +# Copy dotorg assets to /assets +rsync -r "${CI_PROJECT_DIR}/${WP_ORG_ASSETS_DIR}/" assets/ --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 -- GitLab