set_tex_live_image.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const Settings = require('@overleaf/settings')
  2. const { ObjectId } = require('mongodb')
  3. const { Project } = require('../app/src/models/Project')
  4. async function main() {
  5. const { image, projectIds } = parseArgs()
  6. await updateImage(image, projectIds)
  7. }
  8. function parseArgs() {
  9. if (process.argv.length < 4) {
  10. printUsage()
  11. process.exit(1)
  12. }
  13. const image = parseImage(process.argv[2])
  14. const projectIds = parseProjectIds(process.argv.slice(3))
  15. return { image, projectIds }
  16. }
  17. function printUsage() {
  18. console.error('Usage: node set_tex_live_image.js <image> <projectId> ...')
  19. }
  20. function parseImage(image) {
  21. const allowedImageNames = Settings.allowedImageNames.map(x => x.imageName)
  22. if (!allowedImageNames.includes(image)) {
  23. console.error(`Unknown image: ${image}`)
  24. console.error('Please use one of:')
  25. for (const allowedImage of allowedImageNames) {
  26. console.error(` - ${allowedImage}`)
  27. }
  28. process.exit(1)
  29. }
  30. return image
  31. }
  32. function parseProjectIds(projectIds) {
  33. const oids = []
  34. for (const projectId of projectIds) {
  35. let oid
  36. try {
  37. oid = ObjectId(projectId)
  38. } catch (err) {
  39. console.error(`Invalid project id: ${projectId}`)
  40. process.exit(1)
  41. }
  42. oids.push(oid)
  43. }
  44. return oids
  45. }
  46. async function updateImage(image, projectIds) {
  47. const res = await Project.updateMany(
  48. { _id: { $in: projectIds.map(ObjectId) } },
  49. { $set: { imageName: `quay.io/sharelatex/${image}` } }
  50. ).exec()
  51. console.log(`Found ${res.matchedCount} out of ${projectIds.length} projects`)
  52. console.log(`Modified ${res.modifiedCount} projects`)
  53. }
  54. main()
  55. .then(() => {
  56. process.exit()
  57. })
  58. .catch(err => {
  59. console.error(err)
  60. process.exit(1)
  61. })