forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 2
143 lines (128 loc) · 6.28 KB
/
sync-search-indices.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
name: Sync search indexes
# **What it does**: This workflow syncs the Lunr search indexes.
# The search indexes are checked into the lib/search/indexes directory.
# Search indexes are checked directly into the `main` branch on both the
# internal and open-source docs repositories. This workflow should be the
# only mechanism that the search indexes are modified. Because of that,
# repo-sync will not sync the search indexes because it should not detect
# a change.
# **Why we have it**: We want our search indexes kept up to date.
# **Who does it impact**: Anyone using search on docs.
# **Testing: To test this workflow, use the workflow_dispatch event and trigger
# the workflow from the action tab. Select the branch with the changes to the
# workflow. Set `fetch-depth: 0` as an input to the checkout action to get all
# branches, including your test branch. Otherwise, you'll only get the main
# branch. For git lfs push and git push commands use the --dry-run switch to
# prevent pushes (e.g., git push --dry-run origin main --no-verify and
# git lfs push --dry-run public-docs-repo).
# The dry-run switch does everything but actually send the updates.
on:
workflow_dispatch:
inputs:
language:
description: 'Language to generate the search index for. Can be one of: `en` English, `cn` Chinese simplified, `ja` Japanese, `es` Spanish, `pt` Portuguese., `all` all languages.'
required: false
default: 'all'
version:
description: 'Version to generate the search index for. Can be one of: `free-pro-team@latest`, `enterprise-server@<RELEASE NUMBER>`, `github-ae@latest`, `all` all versions.'
required: false
default: 'all'
schedule:
- cron: '53 0/8 * * *' # Run every eight hours at 53 minutes past the hour
permissions:
contents: none
env:
FREEZE: ${{ secrets.FREEZE }}
jobs:
updateIndexes:
name: Update indexes
if: github.repository == 'github/docs-internal'
runs-on: ubuntu-latest
steps:
- if: ${{ env.FREEZE == 'true' }}
run: |
echo 'The repo is currently frozen! Exiting this workflow.'
exit 1 # prevents further steps from running
# Check out internal docs repository
- name: checkout
uses: actions/checkout@dcd71f646680f2efd8db4afa5ad64fdcba30e748
with:
token: ${{ secrets.DOCS_BOT_FR }}
- name: Setup Node
uses: actions/setup-node@17f8bd926464a1afa4c6a11669539e9c1ba77048
with:
node-version: '16.15.0'
cache: npm
- name: Install dependencies
run: npm ci
- name: Cache nextjs build
uses: actions/cache@48af2dc4a9e8278b89d7fa154b955c30c6aaab09
with:
path: .next/cache
key: ${{ runner.os }}-nextjs-${{ hashFiles('package*.json') }}
- name: Run build scripts
run: npm run build
- name: Update search indexes
env:
VERSION: ${{ github.event.inputs.version }}
LANGUAGE: ${{ github.event.inputs.language }}
# We don't want or need the changelog entries in this context.
# Pages that display the content from these isn't included
# in search index bodies anyway.
CHANGELOG_DISABLED: true
# If a reusable, or anything in the `data/*` directory is deleted
# you might get a
#
# RenderError: Can't find the key 'site.data.reusables...' in the scope
#
# But that'll get fixed in the next translation pipeline. For now,
# let's just accept an empty string instead.
THROW_ON_EMPTY: false
# Because the overload protection runs in NODE_ENV==production
# and it can break the sync-search.
DISABLE_OVERLOAD_PROTECTION: true
# Render caching won't help when we visit every page exactly once.
DISABLE_RENDERING_CACHE: true
run: npm run sync-search
- name: Update private docs repository search indexes
# Git pre-push hooks push the LFS objects, so if you don't run them and
# don't push the LFS objects manually, the LFS objects won't get
# pushed. That will likely result in the push getting rejected.
# So if you don't use the pre-push hooks or you run with --no-verify
# the LFS objects need to be pushed first.
run: |
echo 'git config user.name "GitHub Actions"'
git config user.name "GitHub Actions"
echo 'git config user.email action@github.com'
git config user.email action@github.com
echo 'git config pull.ff only'
git config pull.ff only
echo 'git pull origin main --no-verify'
git pull origin main --no-verify
echo 'git add lib/search/indexes/*'
git add lib/search/indexes/*
echo 'git commit -m "update search indexes"'
git commit -m "update search indexes"
echo 'git lfs push --all origin'
git lfs push --all origin
echo 'git push origin main --no-verify'
git push origin main --no-verify
- name: Update open-source docs repository search indexes
# Git pre-push hooks push the LFS objects, so if you don't run them and
# don't push the LFS objects manually, the LFS objects won't get
# pushed. That will likely result in the push getting rejected.
# So if you don't use the pre-push hooks or you run with --no-verify
# the LFS objects need to be pushed first.
run: |
echo 'git remote add public-docs-repo https://github.com/github/docs.git'
git remote add public-docs-repo https://github.com/github/docs.git
echo 'GIT_TRANSFER_TRACE=1 GIT_CURL_VERBOSE=1 GIT_TRACE=1 git lfs push --all public-docs-repo'
GIT_TRANSFER_TRACE=1 GIT_CURL_VERBOSE=1 GIT_TRACE=1 git lfs push --all public-docs-repo
- name: Send slack notification if workflow run fails
uses: someimportantcompany/github-actions-slack-message@f8d28715e7b8a4717047d23f48c39827cacad340
if: failure() && env.FREEZE != 'true'
with:
channel: ${{ secrets.DOCS_ALERTS_SLACK_CHANNEL_ID }}
bot-token: ${{ secrets.SLACK_DOCS_BOT_TOKEN }}
color: failure
text: The last search index workflow run for ${{github.repository}} failed. Search actions for `workflow:search`