Commit 8a122704 authored by Erick Hitter's avatar Erick Hitter

Merge branch 'add/assets' into 'master'

Add support for WP.org's static assets

See merge request !7
parents b22e190a 635e9700
Pipeline #810 passed with stage
in 1 minute and 8 seconds
...@@ -40,8 +40,9 @@ Set the following environment variables in the GitLab project's configuration: ...@@ -40,8 +40,9 @@ Set the following environment variables in the GitLab project's configuration:
* `PLUGIN_SLUG` - plugin's name on WordPress.org * `PLUGIN_SLUG` - plugin's name on WordPress.org
* `PLUGIN_VERSION` - version to tag * `PLUGIN_VERSION` - version to tag
* `WP_ORG_RELEASE_REF` - git commit ref (branch or tag) to use for release * `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. 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 ...@@ -56,6 +57,15 @@ A sample is provided in [examples/gitattributes](./examples/gitattributes). If u
/.gitattributes export-ignore /.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 ## 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. 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.
...@@ -6,38 +6,47 @@ ...@@ -6,38 +6,47 @@
# it does not exit with a 0, and I only care about the final exit. # it does not exit with a 0, and I only care about the final exit.
set -eo set -eo
# Ensure SVN username and password are set # Provide a basic version identifier, particularly since this script
# IMPORTANT: while secrets are encrypted and not viewable in the GitHub UI, # is usually accessed via CDN.
# they are by necessity provided as plaintext in the context of the Action, echo "ℹ︎ WP-ORG-PLUGIN-DEPLOY VERSION: 2019041401"
# so do not echo or use debug mode unless you want your secrets exposed!
if [[ -z "$CI" ]]; then 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 exit 1
fi 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 if [[ -z "$WP_ORG_USERNAME" ]]; then
echo "WordPress.org username not set" 1>&2 echo "𝘅︎ WordPress.org username not set" 1>&2
exit 1 exit 1
fi fi
if [[ -z "$WP_ORG_PASSWORD" ]]; then if [[ -z "$WP_ORG_PASSWORD" ]]; then
echo "WordPress.org password not set" 1>&2 echo "𝘅︎ WordPress.org password not set" 1>&2
exit 1 exit 1
fi fi
if [[ -z "$PLUGIN_SLUG" ]]; then 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 exit 1
fi fi
if [[ -z "$PLUGIN_VERSION" ]]; then 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 exit 1
fi fi
if [[ -z "$WP_ORG_ASSETS_DIR" ]]; then
WP_ORG_ASSETS_DIR=".wordpress-org"
fi
echo "ℹ︎ PLUGIN_SLUG: $PLUGIN_SLUG" echo "ℹ︎ PLUGIN_SLUG: $PLUGIN_SLUG"
echo "ℹ︎ PLUGIN_VERSION: $PLUGIN_VERSION" echo "ℹ︎ PLUGIN_VERSION: $PLUGIN_VERSION"
echo "ℹ︎ WP_ORG_RELEASE_REF: $WP_ORG_RELEASE_REF" 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_URL="https://plugins.svn.wordpress.org/${PLUGIN_SLUG}/"
SVN_DIR="$CI_BUILDS_DIR/svn-${PLUGIN_SLUG}" SVN_DIR="$CI_BUILDS_DIR/svn-${PLUGIN_SLUG}"
...@@ -47,6 +56,7 @@ TMP_DIR="$CI_BUILDS_DIR/git-archive" ...@@ -47,6 +56,7 @@ TMP_DIR="$CI_BUILDS_DIR/git-archive"
echo "➤ Checking out dotorg repository..." echo "➤ Checking out dotorg repository..."
svn checkout --depth immediates "$SVN_URL" "$SVN_DIR" svn checkout --depth immediates "$SVN_URL" "$SVN_DIR"
cd "$SVN_DIR" cd "$SVN_DIR"
svn update --set-depth infinity assets
svn update --set-depth infinity trunk svn update --set-depth infinity trunk
svn update --set-depth infinity "tags/${PLUGIN_VERSION}" svn update --set-depth infinity "tags/${PLUGIN_VERSION}"
...@@ -60,9 +70,10 @@ git config --global user.name "Erick Hitter (GitLab CI)" ...@@ -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 there's no .gitattributes file, write a default one into place
if [[ ! -e "$CI_PROJECT_DIR/.gitattributes" ]]; then if [[ ! -e "$CI_PROJECT_DIR/.gitattributes" ]]; then
cat > "$CI_PROJECT_DIR/.gitattributes" <<-EOL cat > "$CI_PROJECT_DIR/.gitattributes" <<-EOL
/${WP_ORG_ASSETS_DIR} export-ignore
/.gitattributes export-ignore /.gitattributes export-ignore
/.gitignore export-ignore /.gitignore export-ignore
/.github export-ignore /.gitlab-ci.yml export-ignore
EOL EOL
# The .gitattributes file has to be committed to be used # The .gitattributes file has to be committed to be used
...@@ -80,6 +91,9 @@ cd "$SVN_DIR" ...@@ -80,6 +91,9 @@ cd "$SVN_DIR"
# The --delete flag will delete anything in destination that no longer exists in source # The --delete flag will delete anything in destination that no longer exists in source
rsync -r "$TMP_DIR/" trunk/ --delete 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 # Add everything and commit to SVN
# The force flag ensures we recurse into subdirectories even if they are already added # The force flag ensures we recurse into subdirectories even if they are already added
# Suppress stdout in favor of svn status later for readability # Suppress stdout in favor of svn status later for readability
......
Markdown is supported
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