< All Topics
Print

User Build Processes

Many users have different build processes that may be helpful to others.

Bitbucket (For themes)

These steps may be applicable to more services but have only been tested within Bitbucket. This setup will create a new release asset when the style.css file within the theme has its’ version updated, and that version doesn’t already exist as a release. It will automatically create the tag alongside all other steps.

Pipeline

Required environment variables to be set on your repo and preferably hidden:

  • $GITHUB_ACCESS_TOKEN: Generate this from your github account to prevent rate limiting with composer
  • $APP_USERNAME: The bitbucket account that has admin access to this repo
  • $APP_PASSWORD: The password for the bitbucket account

Vars provided by Bitbucket:

  • $BITBUCKET_REPO_SLUG
  • $BITBUCKET_TAG

A specimen pipeline can be found below as a point of reference

Specimen Bitbucket Pipeline

# This is a sample build configuration for PHP.
# Check our guides at https://confluence.atlassian.com/x/e8YWN for more examples.
# Only use spaces to indent your .yml configuration.
# -----
# You can specify a custom docker image from Docker Hub as your build environment.
image: php:7.1.29

pipelines:
  branches:
    # Execute change detection only on master branch
    'master':
      - step:
          image: atlassian/default-image:2
          # Run change detection script (requires git command)
          script:
            - ./changedetected.sh
  tags:
    # Build and upload release asset each time a new tag is pushed
    '*.*.*':
      - step:
          caches:
            - composer
            - node
          script:
            # Setup Environment
            - apt-get update && apt-get install -y unzip zip
            - curl -sL https://deb.nodesource.com/setup_13.x | bash -
            - apt-get install -y nodejs
            - curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
            # Install node and composer dependencies
            - composer config -g github-oauth.github.com $GITHUB_ACCESS_TOKEN
            - composer install --prefer-dist
            - npm install
            # Build all script and style assets (if you use a node based build toolchain)
            - npm run build
            # Zip and upload new release (replace directories to zip with your own)
            - zip -r -q release/$BITBUCKET_REPO_SLUG-$BITBUCKET_TAG.zip *.php assets/ fonts/ languages/ inc/ page-templates/ views/ vendor/ style.css screenshot.jpg
            - pipe: atlassian/bitbucket-upload-file:0.1.2
              variables:
                BITBUCKET_USERNAME: $APP_USERNAME
                BITBUCKET_APP_PASSWORD: $APP_PASSWORD
                FILENAME: 'release/$BITBUCKET_REPO_SLUG-$BITBUCKET_TAG.zip'

Change Detection Script

This is a simple bash script that checks if style.css is in the list of updated files for the current commit. If a change is detected, it checks if a tag already exists for the current release version. If the release doesn’t already exist, it creates a new tag and pushes it to the master repo; which will then trigger the release build in the main pipeline.

The specimen change detection script can be found below

Specimen Change Detection Bash Script

#!/bin/bash

revcount=$(git rev-list --all --count)

if [ "$revcount" -gt 1 ]
then
  histdiff=$(git diff --name-only HEAD HEAD~1 | grep 'style.css')
  if [ "$histdiff" = "style.css" ]
  then
    version=$(grep "Version:" style.css | cut -d ':' -f 2 | xargs)
    if git rev-parse "$version" >/dev/null 2>&1 
    then
      echo "Tag already exists; no action taken"
    else
      echo "Creating new tag ${version}"
      changeref=$(git rev-parse HEAD)
      git tag -a ${version} ${changeref} -m "Release version ${version}"
      git push origin --tags
    fi
  else
    echo "style.css not changed"
  fi
else
  echo "History too short"
fi
Table of Contents