| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import Path from 'path'
- import { promises as fs } from 'fs'
- import { promisify } from 'util'
- import oneSky from '@brainly/onesky-utils'
- import Config from './config.js'
- import { fileURLToPath } from 'url'
- const __dirname = fileURLToPath(new URL('.', import.meta.url))
- const { withAuth } = Config
- const sleep = promisify(setTimeout)
- async function uploadLocales() {
- // Docs: https://github.com/onesky/api-documentation-platform/blob/master/resources/file.md#upload---upload-a-file
- const blob = await oneSky.postFile(
- withAuth({
- fileName: 'en-US.json',
- language: 'en-GB',
- format: 'HIERARCHICAL_JSON',
- content: await fs.readFile(
- Path.join(__dirname, '/../../locales/en.json')
- ),
- keepStrings: false, // deprecate locales that no longer exist in en.json
- })
- )
- return JSON.parse(blob).data.import.id
- }
- async function getImportTask(importId) {
- // Docs: https://github.com/onesky/api-documentation-platform/blob/master/resources/import_task.md
- const blob = await oneSky.getImportTask(withAuth({ importId }))
- return JSON.parse(blob).data
- }
- async function pollUploadStatus(importId) {
- let task
- while ((task = await getImportTask(importId)).status === 'in-progress') {
- console.log('onesky is processing the import ...')
- await sleep(5000)
- }
- if (task.status === 'failed') {
- console.error(JSON.stringify({ task }, null, 2))
- throw new Error('upload failed')
- }
- }
- async function uploadOnce() {
- const importId = await uploadLocales()
- await pollUploadStatus(importId)
- }
- async function main() {
- try {
- await uploadOnce()
- } catch (err) {
- console.error('--- upload failed once ---')
- console.error(err)
- console.error('--- upload failed once ---')
- console.log('retrying upload in 30s')
- await sleep(30_000)
- await uploadOnce()
- }
- }
- try {
- await main()
- } catch (error) {
- console.error({ error })
- process.exit(1)
- }
|