-
Notifications
You must be signed in to change notification settings - Fork 17
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
feat(scripts): push to docs on release #3196
Changes from all commits
1ec78ad
ed6ad01
c38aae2
a9fb871
0ec2d3f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* eslint-disable no-console */ | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. which version of the file did you take for this ? there was a lot of bug fixes done to the previous one There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think the last but you are right I'll double check! |
||
import fsp from 'fs/promises'; | ||
import { resolve } from 'path'; | ||
|
||
import { | ||
emptyDirExceptForDotGit, | ||
gitCommit, | ||
run, | ||
toAbsolutePath, | ||
ensureGitHubToken, | ||
OWNER, | ||
configureGitHubAuthor, | ||
getOctokit, | ||
setVerbose, | ||
} from '../../common.js'; | ||
import { getNbGitDiff } from '../utils.js'; | ||
|
||
import { commitStartRelease } from './text.js'; | ||
|
||
async function pushToAlgoliaDoc(): Promise<void> { | ||
const githubToken = ensureGitHubToken(); | ||
|
||
const repository = 'doc'; | ||
const lastCommitMessage = await run('git log -1 --format="%s"'); | ||
const author = (await run('git log -1 --format="Co-authored-by: %an <%ae>"')).trim(); | ||
const coAuthors = (await run('git log -1 --format="%(trailers:key=Co-authored-by)"')) | ||
.split('\n') | ||
.map((coAuthor) => coAuthor.trim()) | ||
.filter(Boolean); | ||
|
||
if (!process.env.DRY_RUN && !lastCommitMessage.startsWith(commitStartRelease)) { | ||
return; | ||
} | ||
|
||
console.log(`Pushing to ${OWNER}/${repository}`); | ||
|
||
const targetBranch = 'feat/automated-update-from-api-clients-automation-repository'; | ||
const githubURL = `https://${githubToken}:${githubToken}@github.com/${OWNER}/${repository}`; | ||
const tempGitDir = resolve( | ||
process.env.RUNNER_TEMP! || toAbsolutePath('foo/local/test'), | ||
repository, | ||
); | ||
await fsp.rm(tempGitDir, { force: true, recursive: true }); | ||
await run(`git clone --depth 1 ${githubURL} ${tempGitDir}`); | ||
await run(`git checkout -B ${targetBranch}`, { cwd: tempGitDir }); | ||
|
||
const dest = toAbsolutePath(`${tempGitDir}/app_data/api/specs`); | ||
await emptyDirExceptForDotGit(dest); | ||
await run(`cp ${toAbsolutePath('specs/bundled/*.doc.yml')} ${dest}`); | ||
await run(`cp ${toAbsolutePath('config/release.config.json')} ${dest}`); | ||
await run(`cp ${toAbsolutePath('website/src/generated/*.json')} ${dest}`); | ||
Comment on lines
+49
to
+51
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. the snippets are already contained in the bundled spec, is it necessary to also send the json file ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yup it's so that they can leverage the JSONs for the guides like we did! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we had to do this to have both the snippets for redoc, and the snippets for custom guide, are they using the same techno ? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yup! Given the time constraint it seems like the better, wdyt? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I don't know how well this will work with ruby but why not ! There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe fine, since it's simple json input but at least it gives @kai687 the opportunity to try the current solution |
||
await run(`cp ${toAbsolutePath('website/static/img/*-sla.png')} ${dest}`); | ||
|
||
if ((await getNbGitDiff({ head: null, cwd: tempGitDir })) === 0) { | ||
console.log(`❎ Skipping push docs because there is no change.`); | ||
|
||
return; | ||
} | ||
|
||
await configureGitHubAuthor(tempGitDir); | ||
|
||
const message = 'feat(clients): automatic update from api-clients-automation repository'; | ||
await run('git add .', { cwd: tempGitDir }); | ||
await gitCommit({ | ||
message, | ||
coAuthors: [author, ...coAuthors], | ||
cwd: tempGitDir, | ||
}); | ||
await run(`git push -f -u origin ${targetBranch}`, { cwd: tempGitDir }); | ||
|
||
console.log(`Creating pull request on ${OWNER}/${repository}...`); | ||
const octokit = getOctokit(); | ||
const { data } = await octokit.pulls.create({ | ||
owner: OWNER, | ||
repo: repository, | ||
title: message, | ||
body: [ | ||
'This PR is automatically created by https://github.com/algolia/api-clients-automation', | ||
'It contains the latest released OpenAPI specs, the release SLA dates and PNGs, and the generated code snippets.', | ||
].join('\n\n'), | ||
base: 'master', | ||
head: targetBranch, | ||
}); | ||
|
||
console.log(`Pull request created on ${OWNER}/${repository}`); | ||
console.log(` > ${data.url}`); | ||
} | ||
|
||
if (import.meta.url.endsWith(process.argv[1])) { | ||
setVerbose(false); | ||
pushToAlgoliaDoc(); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -26,3 +26,4 @@ yarn-error.log* | |
specs | ||
|
||
src/generated/*.js | ||
src/generated/*.json |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we should support the
JSON
one you mean, thejs
one is for our doc.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes but the JS one will be removed once the doc is live that's what i meant
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so we plan on removing our doc entirely ? :(
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yup at least for GA, @kai687 has great plans for it!