-
Notifications
You must be signed in to change notification settings - Fork 132
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Integrates with Crowdin to enable i18n of the site. This PR changes the source of truth for Crowdin and moves it to this repository instead of relying on `electron/i18n`. Additionally it uses Crowdin's CLI to do the upload/download of assets making it more reliable. The website is built on locale at a time via `yarn i18n:build`. Otherwise the process crashed with an out of memory error. The regular `yarn build` command still compiles the `en` locale. Because we cannot get notifications when there are new translations avaiable, there is a GitHub workflow (`update-i18n-deploy.yml`) that downloads the content every few minutes, builds, and deploy. To speed up this process, the previous generated assets are download. In local tests this reduces the build times from 250s to 40s so the whole process should take about 5 minutes. The previous generated content is stored in Azure Storage. Because this is a static website it makes more sense than having a dyno and will make it easier to: - deploy multiple locales at the same time if we still need to speed up the process - have versioned docs because we just need to "take a snapshot" and publish to a different folder The current live site is still not using this storage but will soon-ish. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fix #64
- Loading branch information
Showing
18 changed files
with
248 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
name: 'Update i18n deploy' | ||
|
||
on: | ||
schedule: | ||
- cron: '*/15 * * * *' | ||
|
||
jobs: | ||
deploy: | ||
name: 'Build and deploy localized site' | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
|
||
- name: Use Node.js 14 | ||
uses: actions/setup-node@v2 | ||
with: | ||
node-version: 14 | ||
|
||
- name: Install dependencies | ||
uses: bahmutov/npm-install@HEAD | ||
|
||
- name: Download crowdin translation | ||
run: yarn i18n:download | ||
env: | ||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} | ||
|
||
- name: Download cache | ||
run: ./scripts/bin/azcopy copy "https://electronjsorg.blob.core.windows.net/%24web/*?${{ SSA }}" "./build" --recursive | ||
env: | ||
SSA: ${{ secrets.SSA }} | ||
|
||
- name: Build | ||
run: yarn i18n:build | ||
|
||
- name: Deploy | ||
run: ./scripts/bin/azcopy copy "./build/*" "https://electronjsorg.blob.core.windows.net/%24web?${{ SSA }}" --recursive | ||
env: | ||
SAS: ${{ secrets.SSA }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,4 +4,6 @@ node_modules | |
.env | ||
.vscode/settings.json | ||
build/ | ||
content/ | ||
content/ | ||
i18n/ | ||
!i18n/en/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
project_id: '273870' | ||
api_token_env: 'CROWDIN_PERSONAL_TOKEN' | ||
preserve_hierarchy: true | ||
files: [ | ||
# JSON translation files | ||
{ | ||
source: '/i18n/en/**/*', | ||
translation: '/i18n/%two_letters_code%/**/%original_file_name%', | ||
}, | ||
# Docs Markdown files | ||
{ | ||
source: '/docs/**/*', | ||
translation: '/i18n/%two_letters_code%/docusaurus-plugin-content-docs/current/**/%original_file_name%', | ||
ignore: ['/docs/**/fiddles', '/docs/**/images'], | ||
}, | ||
# Blog Markdown files | ||
{ | ||
source: '/blog/**/*', | ||
translation: '/i18n/%two_letters_code%/docusaurus-plugin-content-blog/**/%original_file_name%', | ||
}, | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
//@ts-check | ||
const fs = require('fs').promises; | ||
const { join } = require('path'); | ||
const { execute } = require('./utils/execute'); | ||
const { | ||
i18n: { locales, defaultLocale }, | ||
} = require('../docusaurus.config'); | ||
|
||
const updateConfig = async (locale) => { | ||
const baseUrl = locale !== defaultLocale ? `/${locale}/` : '/'; | ||
// Translations might not be completely in sync and we need to keep publishing | ||
const onBrokenLinks = locale !== defaultLocale ? `warn` : `throw`; | ||
const configPath = join(__dirname, '../docusaurus.config.js'); | ||
|
||
let docusaurusConfig = await fs.readFile(configPath, 'utf-8'); | ||
|
||
docusaurusConfig = docusaurusConfig | ||
.replace(/baseUrl: '.*?',/, `baseUrl: '${baseUrl}',`) | ||
.replace(/onBrokenLinks: '.*?',/, `onBrokenLinks: '${onBrokenLinks}',`); | ||
|
||
await fs.writeFile(configPath, docusaurusConfig, 'utf-8'); | ||
}; | ||
|
||
const processLocale = async (locale) => { | ||
const start = Date.now(); | ||
const outdir = locale !== defaultLocale ? `--out-dir build/${locale}` : ''; | ||
await execute(`yarn docusaurus build --locale ${locale} ${outdir}`); | ||
console.log(`Locale ${locale} finished in ${(Date.now() - start) / 1000}s`); | ||
}; | ||
|
||
/** | ||
* | ||
* @param {string} [locale] | ||
*/ | ||
const start = async (locale) => { | ||
const start = Date.now(); | ||
|
||
const localesToBuild = locale ? [locale] : locales; | ||
|
||
console.log('Building the following locales:'); | ||
console.log(localesToBuild); | ||
|
||
for (const locale of localesToBuild) { | ||
try { | ||
await updateConfig(locale); | ||
await processLocale(locale); | ||
} catch (e) { | ||
// We catch instead of just stopping the process because we want to restore docusaurus.config.js | ||
console.error(e); | ||
// TODO: It will be nice to do some clean up and point to the right file and line | ||
console.error(`Locale ${locale} failed. Please check the logs above.`) | ||
} | ||
} | ||
|
||
// Restore `docusaurus.config.js` to the default values | ||
await updateConfig(defaultLocale); | ||
|
||
console.log(`Process finished in ${(Date.now() - start) / 1000}s`); | ||
}; | ||
|
||
start(process.argv[2]); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
//@ts-check | ||
|
||
/** | ||
* Takes care of downloading the documentation from the | ||
* right places, and transform it to make it ready to | ||
* be used by docusaurus. | ||
*/ | ||
const path = require('path'); | ||
const fs = require('fs-extra'); | ||
|
||
const { addFrontmatter } = require('./tasks/add-frontmatter'); | ||
const { fixContent } = require('./tasks/md-fixers'); | ||
|
||
const DOCS_FOLDER = path.join('docs', 'latest'); | ||
const { | ||
i18n: { locales: configuredLocales }, | ||
} = require('../docusaurus.config'); | ||
|
||
const start = async () => { | ||
const locales = new Set(configuredLocales); | ||
locales.delete('en'); | ||
for (const locale of locales) { | ||
const localeDocs = path.join( | ||
'i18n', | ||
locale, | ||
'docusaurus-plugin-content-docs', | ||
'current' | ||
); | ||
const staticResources = ['fiddles', 'images']; | ||
|
||
console.log(`Copying static assets to ${locale}`); | ||
for (const staticResource of staticResources) { | ||
await fs.copy( | ||
path.join(DOCS_FOLDER, staticResource), | ||
path.join(localeDocs, 'latest', staticResource) | ||
); | ||
} | ||
|
||
console.log(`Fixing markdown (${locale})`); | ||
await fixContent(localeDocs, 'latest'); | ||
|
||
console.log(`Adding automatic frontmatter (${locale})`); | ||
await addFrontmatter(path.join(localeDocs, 'latest')); | ||
} | ||
}; | ||
|
||
start(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters