1
0
mirror of synced 2025-12-19 18:10:59 -05:00

Use review server URL for content changes table (#53812)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Kevin Heis <heiskr@users.noreply.github.com>
Co-authored-by: Evan Bonsignori <ebonsignori@github.com>
This commit is contained in:
Hector Alfaro
2025-01-22 10:10:55 -05:00
committed by GitHub
parent 3714cfb2f5
commit f27c521efe
3 changed files with 114 additions and 26 deletions

View File

@@ -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"

View File

@@ -28,6 +28,7 @@ on:
paths:
- 'content/**'
- 'data/reusables/**'
- 'assets/images/**'
permissions:
contents: read
@@ -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
@@ -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.
---
@@ -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

View File

@@ -1,5 +1,3 @@
#!/usr/bin/env node
/**
* Hi there! 👋
* To test this code locally, outside of Actions, you need to run
@@ -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)
@@ -44,14 +41,9 @@ 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)
}
}
async function main(owner: string, repo: string, baseSHA: string, headSHA: string) {
if (!GITHUB_TOKEN) {
@@ -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,
@@ -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 })
}),
)
@@ -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,
})
@@ -194,6 +207,7 @@ type File = {
function makeRow({
file,
fileUrl,
queryParams,
fileName,
sourceUrl,
data,
@@ -201,6 +215,7 @@ function makeRow({
}: {
file: File
fileUrl: string
queryParams: string
fileName: string
sourceUrl: string
data: any
@@ -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) {
@@ -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>'