Skip to content

Commit

Permalink
Use review server URL for content changes table (#53812)
Browse files Browse the repository at this point in the history
Co-authored-by: Copilot <[email protected]>
Co-authored-by: Kevin Heis <[email protected]>
Co-authored-by: Evan Bonsignori <[email protected]>
  • Loading branch information
4 people authored Jan 22, 2025
1 parent 3714cfb commit f27c521
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 26 deletions.
66 changes: 66 additions & 0 deletions .github/workflows/code-changes-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Code changes comment

# **What it does**: When a PR is opened in docs-internal or docs containing code, it comments with instructions on how to deploy and preview the changes.
# **Why we have it**: To help Docs contributors understand how to preview their changes.
# **Who does it impact**: docs-internal and docs maintainers and contributors

on:
# Required in lieu of `pull_request` so that the comment can be posted to PRs opened from a fork.
pull_request_target:
types:
- opened
- synchronize
# this applies to any non-content files, this workflow will run for all changed files unless it's ONLY these content-related changes
paths-ignore:
- 'content/**'
- 'data/reusables/**'
- 'assets/images/**'

permissions:
contents: read
pull-requests: write

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
cancel-in-progress: true

jobs:
postOnCodeChanges:
if: ${{ github.event.pull_request.user.login != 'docs-bot' && (github.repository == 'github/docs-internal' || github.repository == 'github/docs') }}
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: check out repo content
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Find code changes comment
uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e
id: findComment
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: '<!-- CODE_CHANGES_COMMENT -->'

# TODO: We'll update this comment at a later time with permament-ish links to deployment instructions.
- name: Comment on code changes
if: ${{ !steps.findComment.outputs.comment-id }}
run: |
if [[ "${{ github.repository }}" == "github/docs" ]]; then
COMMENT_BODY="<!-- CODE_CHANGES_COMMENT -->
## 🚀 Manual Deployment Required
It looks like this pull request contains code changes. To preview these changes, an internal Hubber will need to manually deploy the changes to one of our staging servers.
Thank you for your contribution!"
else
COMMENT_BODY="<!-- CODE_CHANGES_COMMENT -->
## 🚀 Manual Deployment Required
It looks like this pull request contains code changes. To preview these changes, you will need to deploy them manually.
Thank you for your contribution!"
fi
gh pr comment ${{ github.event.pull_request.number }} --body "$COMMENT_BODY"
29 changes: 18 additions & 11 deletions .github/workflows/content-changes-table-comment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ on:
paths:
- 'content/**'
- 'data/reusables/**'
- 'assets/images/**'

permissions:
contents: read
Expand All @@ -48,21 +49,28 @@ jobs:
- name: check out repo content
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1

- name: Get preview app info
env:
APP_NAME_SEED: ${{ secrets.PREVIEW_ENV_NAME_SEED }}
run: src/workflows/get-preview-app-info.sh

- uses: ./.github/actions/node-npm-setup

# We're setting the URLs manually until we merge in-progress work. We can utilize review server and its helper functions in a later iteration.
- name: Set APP_URL
run: |
if [[ "${{ github.repository }}" == "github/docs-internal" ]]; then
echo "APP_URL=https://docs-review.github.com" >> $GITHUB_ENV
elif [[ "${{ github.repository }}" == "github/docs" ]]; then
echo "APP_URL=https://os-docs-review.github.com" >> $GITHUB_ENV
fi
- name: Get changes table
id: changes
timeout-minutes: 30
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REVIEW_SERVER_ACCESS_TOKEN: ${{ secrets.REVIEW_SERVER_ACCESS_TOKEN }}
APP_URL: ${{ env.APP_URL }}
BASE_SHA: ${{ github.event.pull_request.base.sha || inputs.BASE_SHA }}
HEAD_SHA: ${{ github.event.pull_request.head.sha || inputs.HEAD_SHA }}
# HEAD_BRANCH isn't necessary for the table comment, but lets us list the branch in the review server menu bar
HEAD_BRANCH: ${{ github.event.pull_request.head.ref }}
run: npm run content-changes-table-comment

- name: Find content directory changes comment
Expand All @@ -81,10 +89,10 @@ jobs:
issue-number: ${{ github.event.pull_request.number || inputs.PR_NUMBER }}
body: |
<!-- MODIFIED_CONTENT_LINKING_COMMENT -->
## Automatically generated comment ℹ️
**This comment is automatically generated and will be overwritten every time changes are committed to this branch.**
## 👓 Previews for changed content
**This comment is 🤖 automatically generated and will be overwritten every time changes are committed to this branch.**
The table contains an overview of files in the `content` directory that have been changed in this pull request. It's provided to make it easy to review your changes on the staging site. Please note that changes to the `data` directory will not show up in this table.
The table contains an overview of files in the `content` directory that have been changed in this pull request. It's provided to make it easy to review your changes on the review server. Please note that changes to the `data` directory will not show up in this table.
---
Expand All @@ -93,7 +101,6 @@ jobs:
${{ steps.changes.outputs.changesTable }}
---
fpt: Free, Pro, Team
ghec: GitHub Enterprise Cloud
ghes: GitHub Enterprise Server
Key: **fpt**: Free, Pro, Team; **ghec**: GitHub Enterprise Cloud; **ghes**: GitHub Enterprise Server
_This table is posted from the [${{ github.workflow }}](https://github.com/${{ github.repository }}/blob/${{ github.sha }}/.github/workflows/content-changes-table-comment.yml) workflow._
edit-mode: replace
45 changes: 30 additions & 15 deletions src/workflows/content-changes-table-comment.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#!/usr/bin/env node

/**
* Hi there! 👋
* To test this code locally, outside of Actions, you need to run
Expand All @@ -23,11 +21,10 @@ import { getContents } from './git-utils.js'
import getApplicableVersions from '@/versions/lib/get-applicable-versions.js'
import nonEnterpriseDefaultVersion from '@/versions/lib/non-enterprise-default-version.js'
import { allVersionShortnames } from '@/versions/lib/all-versions.js'
import { waitUntilUrlIsHealthy } from './wait-until-url-is-healthy.js'
import readFrontmatter from '@/frame/lib/read-frontmatter.js'
import { inLiquid } from './lib/in-liquid'

const { GITHUB_TOKEN, APP_URL } = process.env
const { GITHUB_TOKEN, REVIEW_SERVER_ACCESS_TOKEN, APP_URL } = process.env
const context = github.context

// the max size of the comment (in bytes)
Expand All @@ -44,13 +41,8 @@ if (import.meta.url.endsWith(process.argv[1])) {
const baseSHA = process.env.BASE_SHA || context.payload.pull_request!.base.sha
const headSHA = process.env.HEAD_SHA || context.payload.pull_request!.head.sha

const isHealthy = await waitUntilUrlIsHealthy(new URL('/healthz', APP_URL).toString())
if (!isHealthy) {
core.setFailed(`Timeout waiting for preview environment: ${APP_URL}`)
} else {
const markdownTable = await main(owner, repo, baseSHA, headSHA)
core.setOutput('changesTable', markdownTable)
}
const markdownTable = await main(owner, repo, baseSHA, headSHA)
core.setOutput('changesTable', markdownTable)
}

async function main(owner: string, repo: string, baseSHA: string, headSHA: string) {
Expand All @@ -60,10 +52,30 @@ async function main(owner: string, repo: string, baseSHA: string, headSHA: strin
if (!APP_URL) {
throw new Error(`APP_URL environment variable not set`)
}
const headBranch = process.env.HEAD_BRANCH

const RetryingOctokit = Octokit.plugin(retry)
const octokit = new RetryingOctokit({
auth: `token ${GITHUB_TOKEN}`,
})

// we'll attach the branch or sha right after this
const searchParams = new URLSearchParams({
'review-server-repository': `${owner}/${repo}`,
})

// this token will be available in the internal repo only, skip it for the open source repo
if (REVIEW_SERVER_ACCESS_TOKEN)
searchParams.append('review-server-access-token', REVIEW_SERVER_ACCESS_TOKEN)

// this script compares with SHAs only, so this allows us
// to surface the branch name for the review server bar
headBranch
? searchParams.append('review-server-branch', headBranch)
: searchParams.append('review-server-sha', headSHA)

const queryParams = `?${searchParams.toString()}`

// get the list of file changes from the PR
const response = await octokit.rest.repos.compareCommitsWithBasehead({
owner,
Expand Down Expand Up @@ -134,7 +146,7 @@ async function main(owner: string, repo: string, baseSHA: string, headSHA: strin
return
}

return makeRow({ file, fileName, sourceUrl, fileUrl, data })
return makeRow({ file, fileName, sourceUrl, fileUrl, queryParams, data })
}),
)

Expand All @@ -149,6 +161,7 @@ async function main(owner: string, repo: string, baseSHA: string, headSHA: strin
fileName,
sourceUrl: file.blob_url,
fileUrl,
queryParams,
data,
fromReusable: true,
})
Expand Down Expand Up @@ -194,13 +207,15 @@ type File = {
function makeRow({
file,
fileUrl,
queryParams,
fileName,
sourceUrl,
data,
fromReusable,
}: {
file: File
fileUrl: string
queryParams: string
fileName: string
sourceUrl: string
data: any
Expand Down Expand Up @@ -235,12 +250,12 @@ function makeRow({
if (versions.toString() === nonEnterpriseDefaultVersion) {
// omit version from fpt url

previewCell += `[${plan}](${APP_URL}/${fileUrl})<br>`
previewCell += `[${plan}](${APP_URL}/${fileUrl}${queryParams})<br>`
prodCell += `[${plan}](${PROD_URL}/${fileUrl})<br>`
} else {
// for non-versioned releases (ghec) use full url

previewCell += `[${plan}](${APP_URL}/${versions}/${fileUrl})<br>`
previewCell += `[${plan}](${APP_URL}/${versions}/${fileUrl}${queryParams})<br>`
prodCell += `[${plan}](${PROD_URL}/${versions}/${fileUrl})<br>`
}
} else if (versions.length) {
Expand All @@ -250,7 +265,7 @@ function makeRow({
prodCell += `${plan}@ `

versions.forEach((version) => {
previewCell += `[${version.split('@')[1]}](${APP_URL}/${version}/${fileUrl}) `
previewCell += `[${version.split('@')[1]}](${APP_URL}/${version}/${fileUrl}${queryParams}) `
prodCell += `[${version.split('@')[1]}](${PROD_URL}/${version}/${fileUrl}) `
})
previewCell += '<br>'
Expand Down

0 comments on commit f27c521

Please sign in to comment.