0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2024-12-30 22:34:01 -05:00

Rewrote clean.sh script in javascript (#21909)

ref https://linear.app/ghost/issue/ENG-1958/rewrite-cleansh-in-js

- This script removes all node_modules, clears the yarn cache, nx cache,
and deletes all build artifacts to provide a "fresh start". It's
particularly useful for switching back and forth between local vs docker
development environments because some of the node_modules (and therefore
the caches) are built specifically for the architecture of whatever
"host" they are built on.
- The script works fine, but it's written in bash which isn't super easy
to extend/modify and most of this repo is in JavaScript, so
this commit just rewrites the bash script in JS for easier
maintainability.
This commit is contained in:
Chris Raible 2024-12-17 21:00:38 -05:00 committed by GitHub
parent 3bac33ffff
commit ec59aa39c5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 64 additions and 27 deletions

63
.github/scripts/clean.js vendored Normal file
View file

@ -0,0 +1,63 @@
// NOTE: this file can't use any NPM dependencies because it needs to run even if dependencies aren't installed yet or are corrupted
const {execSync} = require('child_process');
const isDevContainer = process.env.DEVCONTAINER === 'true';
cleanYarnCache();
resetNxCache();
deleteNodeModules();
deleteBuildArtifacts();
console.log('Cleanup complete!');
function deleteBuildArtifacts() {
console.log('Deleting all build artifacts...');
try {
execSync('find ./ghost -type d -name "build" -exec rm -rf \'{}\' +', {
stdio: 'inherit'
});
execSync('find ./ghost -type f -name "tsconfig.tsbuildinfo" -delete', {
stdio: 'inherit'
});
} catch (error) {
console.error('Failed to delete build artifacts:', error);
process.exit(1);
}
}
function deleteNodeModules() {
console.log('Deleting all node_modules directories...');
try {
execSync('find . -name "node_modules" -type d -prune -exec rm -rf \'{}\' +', {
stdio: 'inherit'
});
} catch (error) {
console.error('Failed to delete node_modules directories:', error);
process.exit(1);
}
}
function resetNxCache() {
console.log('Resetting NX cache...');
try {
execSync('rm -rf .nxcache .nx');
} catch (error) {
console.error('Failed to reset NX cache:', error);
process.exit(1);
}
}
function cleanYarnCache() {
console.log('Cleaning yarn cache...');
try {
if (isDevContainer) {
// In devcontainer, these directories are mounted from the host so we can't delete them — `yarn cache clean` will fail
// so we delete the contents of the directories instead
execSync('rm -rf .yarncache/* .yarncachecopy/*');
} else {
execSync('yarn cache clean');
}
} catch (error) {
console.error('Failed to clean yarn cache:', error);
process.exit(1);
}
}

View file

@ -1,26 +0,0 @@
#!/bin/bash
set -e
# Clean yarn cache
echo "Cleaning yarn cache..."
if [ "$DEVCONTAINER" = "true" ]; then
# In devcontainer, these directories are mounted from the host so we can't delete them — only their contents
rm -rf .yarncache/* .yarncachecopy/*
else
yarn cache clean
fi
# Reset Nx
echo "Resetting NX cache..."
rm -rf .nxcache .nx
# Recursively delete all node_modules directories
echo "Deleting all node_modules directories..."
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
echo "Deleting all build artifacts..."
find ./ghost -type d -name "build" -exec rm -rf '{}' +
find ./ghost -type f -name "tsconfig.tsbuildinfo" -delete
echo "Cleanup complete!"

View file

@ -23,7 +23,7 @@
"archive": "nx run ghost:archive",
"build": "nx run-many -t build",
"build:clean": "nx reset && rimraf -g 'ghost/*/build' && rimraf -g 'ghost/*/tsconfig.tsbuildinfo'",
"clean:hard": "./.github/scripts/clean.sh",
"clean:hard": "node ./.github/scripts/clean.js",
"dev:debug": "DEBUG_COLORS=true DEBUG=@tryghost*,ghost:* yarn dev",
"dev:admin": "node .github/scripts/dev.js --admin",
"dev:ghost": "node .github/scripts/dev.js --ghost",