Skip to content

Use match job in docs-preview build #1289

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 21, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 40 additions & 21 deletions .github/workflows/preview-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,11 @@ jobs:
- name: Not a push event
id: event-check
if: contains(fromJSON('["merge_group", "pull_request", "pull_request_target"]'), github.event_name)
# ensure we emit static output to simplify our checks in the build step, next/current output has no barrings during preview builds
# we always want to run for pull requests, but we do not want to indicate its either content source
run: |
echo "content-source-match=true" >> $GITHUB_OUTPUT
echo "content-source-next=true" >> $GITHUB_OUTPUT
echo "content-source-current=true" >> $GITHUB_OUTPUT
echo "content-source-next=false" >> $GITHUB_OUTPUT
echo "content-source-current=false" >> $GITHUB_OUTPUT
- name: Match for push events
id: match
if: contains(fromJSON('["push"]'), github.event_name)
Expand All @@ -94,31 +94,36 @@ jobs:
runs-on: ubuntu-latest
env:
GITHUB_PR_REF_NAME: ${{ github.event.pull_request.head.ref }}
MATCH: ${{ needs.match.outputs.content-source-match }}
needs: [ match ]
steps:

- name: Checkout
if: contains(fromJSON('["push", "merge_group", "workflow_dispatch"]'), github.event_name)
if: env.MATCH == 'true' && (contains(fromJSON('["push", "merge_group", "workflow_dispatch"]'), github.event_name))
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.ref }}

- name: Get changed files
if: contains(fromJSON('["merge_group", "pull_request", "pull_request_target"]'), github.event_name)
if: env.MATCH == 'true' && (contains(fromJSON('["merge_group", "pull_request", "pull_request_target"]'), github.event_name))
id: check-files
uses: tj-actions/changed-files@2f7c5bfce28377bc069a65ba478de0a74aa0ca32 # v46.0.1
with:
files: ${{ inputs.path-pattern != '' && inputs.path-pattern || '**' }}

- name: Checkout
if: startsWith(github.event_name, 'pull_request') && steps.check-files.outputs.any_modified == 'true'
if: env.MATCH == 'true' && (startsWith(github.event_name, 'pull_request') && steps.check-files.outputs.any_modified == 'true')
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || github.ref }}
persist-credentials: false

- name: Create Deployment
if: contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name) || (steps.check-files.outputs.any_modified == 'true' && startsWith(github.event_name, 'pull_request'))
if: |
env.MATCH == 'true' &&
(contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name)
|| (steps.check-files.outputs.any_modified == 'true' && startsWith(github.event_name, 'pull_request'))
)
uses: actions/github-script@v7
id: deployment
env:
Expand Down Expand Up @@ -151,7 +156,7 @@ jobs:
return deployment.data.id

- name: Generate env.PATH_PREFIX
if: steps.deployment.outputs.result
if: env.MATCH == 'true' && (steps.deployment.outputs.result)
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
GITHUB_REF_NAME: ${{ github.ref_name }}
Expand All @@ -162,10 +167,6 @@ jobs:
;;
"push" | "workflow_dispatch")
echo "PATH_PREFIX=/${GITHUB_REPOSITORY}/tree/${GITHUB_REF_NAME}" >> $GITHUB_ENV
if [[ ! "${GITHUB_REF_NAME}" =~ ^(main|master|16\.x)$ ]]; then
echo "Unsupported ref name: '${GITHUB_REF_NAME}'";
exit 1;
fi
;;
*)
echo "Unsupported event: '${GITHUB_EVENT_NAME}'";
Expand All @@ -174,18 +175,22 @@ jobs:
esac

- name: Bootstrap Action Workspace
if: github.repository == 'elastic/docs-builder' && steps.deployment.outputs.result
if: env.MATCH == 'true' && (github.repository == 'elastic/docs-builder' && steps.deployment.outputs.result)
uses: elastic/docs-builder/.github/actions/bootstrap@main

# we run our artifact directly please use the prebuild
# we run our artifact directly, please use the prebuild
# elastic/docs-builder@main GitHub Action for all other repositories!
- name: Build documentation
if: github.repository == 'elastic/docs-builder' && steps.deployment.outputs.result
if: env.MATCH == 'true' && (github.repository == 'elastic/docs-builder' && steps.deployment.outputs.result)
run: |
dotnet run --project src/tooling/docs-builder -- --strict --path-prefix "${PATH_PREFIX}"

- name: Build documentation
if: github.repository != 'elastic/docs-builder' && (steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group'))
if: |
env.MATCH == 'true' &&
(github.repository != 'elastic/docs-builder' &&
(steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group'))
)
uses: elastic/docs-builder@main
id: docs-build
continue-on-error: ${{ fromJSON(inputs.continue-on-error != '' && inputs.continue-on-error || 'false') }}
Expand All @@ -195,32 +200,46 @@ jobs:
metadata-only: ${{ fromJSON(inputs.metadata-only != '' && inputs.metadata-only || 'true') }}

- name: 'Validate inbound links'
if: ${{ !cancelled() && steps.docs-build.outputs.skip != 'true' && (steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group')) }}
if: |
env.MATCH == 'true' &&
(!cancelled() && steps.docs-build.outputs.skip != 'true'
&& (steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group'))
)
uses: elastic/docs-builder/actions/validate-inbound-local@main

- name: 'Validate local path prefixes against those claimed by global navigation.yml'
if: ${{ !cancelled() && steps.docs-build.outputs.skip != 'true' && (steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group')) }}
if: |
env.MATCH == 'true' &&
(!cancelled() && steps.docs-build.outputs.skip != 'true' &&
(steps.deployment.outputs.result || (steps.check-files.outputs.any_modified == 'true' && github.event_name == 'merge_group'))
)
uses: elastic/docs-builder/actions/validate-path-prefixes-local@main

- uses: elastic/docs-builder/.github/actions/aws-auth@main
if: ${{ !cancelled() && steps.docs-build.outputs.skip != 'true' && steps.deployment.outputs.result }}

- name: Upload to S3
id: s3-upload
if: ${{ !cancelled() && steps.docs-build.outputs.skip != 'true' && steps.deployment.outputs.result }}
if: |
env.MATCH == 'true' &&
(!cancelled() && steps.docs-build.outputs.skip != 'true' && steps.deployment.outputs.result)
run: |
aws s3 sync .artifacts/docs/html "s3://elastic-docs-v3-website-preview${PATH_PREFIX}" --delete --no-follow-symlinks
aws cloudfront create-invalidation \
--distribution-id EKT7LT5PM8RKS \
--paths "${PATH_PREFIX}" "${PATH_PREFIX}/*"

- name: Update Link Index
if: contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name) && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') && steps.s3-upload.outcome == 'success'
if: |
env.MATCH == 'true' &&
(contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name)
&& (needs.match.outputs.content-source-current == 'true' || needs.match.outputs.content-source-next == 'true')
&& steps.s3-upload.outcome == 'success')
uses: elastic/docs-builder/actions/update-link-index@main

- name: Update deployment status
uses: actions/github-script@v7
if: always() && steps.deployment.outputs.result
if: env.MATCH == 'true' && (always() && steps.deployment.outputs.result)
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
LANDING_PAGE_PATH: ${{ steps.docs-build.outputs.landing-page-path || env.PATH_PREFIX }}
Expand Down
Loading