name: Build Live Branch on: pull_request: paths-ignore: - 'docs/**' - 'packages/php/**' - 'tools/**' - '**/changelog/**' - '**/tests/**' - '**/*.md' concurrency: # Cancel concurrent jobs on pull_request but not push, by including the run_id in the concurrency group for the latter. group: build-${{ github.event_name == 'push' && github.run_id || 'pr' }}-${{ github.ref }} cancel-in-progress: true permissions: {} jobs: build: if: github.repository_owner == 'woocommerce' && github.event.pull_request.user.login != 'github-actions[bot]' runs-on: ubuntu-20.04 permissions: contents: write pull-requests: write repository-projects: write id-token: write steps: - uses: actions/checkout@v4 - name: Get current version id: version uses: actions/github-script@v6.3.3 with: script: const { getVersion } = require( './.github/workflows/scripts/get-plugin-version' ); const version = await getVersion( 'woocommerce' ); core.setOutput( 'version', version ); - name: Setup WooCommerce Monorepo uses: ./.github/actions/setup-woocommerce-monorepo - name: Prepare plugin zips id: prepare env: CURRENT_VERSION: ${{ steps.version.outputs.version }} run: | # Current version must compare greater than any previously used current version for this PR. # Assume GH run IDs are monotonic. VERSUFFIX="${GITHUB_RUN_ID}-g$(git rev-parse --short HEAD)" CURRENT_VERSION="$CURRENT_VERSION-$VERSUFFIX" sed -i -e 's/Version: .*$/Version: '"$CURRENT_VERSION"'/' "$GITHUB_WORKSPACE/plugins/woocommerce/woocommerce.php" echo "$CURRENT_VERSION" > "$GITHUB_WORKSPACE/plugins/woocommerce/version.txt" cd "$GITHUB_WORKSPACE/plugins/woocommerce" bash bin/build-zip.sh mkdir "$GITHUB_WORKSPACE/zips" mkdir -p "$GITHUB_WORKSPACE/unzips/woocommerce" cp "$GITHUB_WORKSPACE/plugins/woocommerce/woocommerce.zip" "$GITHUB_WORKSPACE/zips/woocommerce.zip" cd "$GITHUB_WORKSPACE/zips" unzip woocommerce.zip cp -r woocommerce "$GITHUB_WORKSPACE/unzips/woocommerce/woocommerce" rm woocommerce.zip mv woocommerce woocommerce-dev zip -q -r "woocommerce-dev.zip" "woocommerce-dev/" rm -fR "$GITHUB_WORKSPACE/zips/woocommerce-dev" # Plugin data is passed as a JSON object. PLUGIN_DATA="{}" PLUGIN_DATA=$( jq -c --arg slug "woocommerce" --arg ver "$CURRENT_VERSION" '.[ $slug ] = { version: $ver }' <<<"$PLUGIN_DATA" ) echo "plugin-data=$PLUGIN_DATA" >> $GITHUB_OUTPUT - name: Create plugins artifact uses: actions/upload-artifact@v4 if: steps.prepare.outputs.plugin-data != '{}' with: name: plugins path: zips # Only need to retain for a day since the beta builder slurps it up to distribute. retention-days: 1 - name: Create playground artifact uses: actions/upload-artifact@v4 if: steps.prepare.outputs.plugin-data != '{}' with: name: plugins-${{ github.run_id }} path: unzips/woocommerce retention-days: 30 - name: Inform Beta Download webhook if this is an internal PR if: steps.prepare.outputs.plugin-data != '{}' && ! github.event.pull_request.head.repo.fork env: SECRET: ${{ secrets.WOOBETA_SECRET }} PLUGIN_DATA: ${{ steps.prepare.outputs.plugin-data }} PR: ${{ github.event.number }} run: | curl -v --fail -L \ --url "https://betadownload.jetpack.me/gh-action.php?run_id=$GITHUB_RUN_ID&pr=$PR&commit=$GITHUB_SHA" \ --form-string "repo=$GITHUB_REPOSITORY" \ --form-string "branch=${GITHUB_REF#refs/heads/}" \ --form-string "plugins=$PLUGIN_DATA" \ --form-string "secret=$SECRET" - name: Comment on PR with WordPress Playground details uses: actions/github-script@v7 if: steps.prepare.outputs.plugin-data != '{}' with: script: | const { run } = require('./.github/workflows/scripts/generate-playground-blueprint'); run({ github, context, core });