Appearance
Build Metadata
Access information about the current build.
Methods
getInfo()
Get build information:
javascript
const info = gemshell.build.getInfo();
// Returns:
{
platform: 'darwin', // darwin, win32, linux
arch: 'arm64', // arm64, x64, ia32
gemshellVersion: '0.6.0',
buildNumber: 42,
timestamp: '2024-01-25T12:00:00.000Z',
isProduction: true,
isDevelopment: false
}getGameConfig()
Get game configuration:
javascript
const config = gemshell.build.getGameConfig();
// Returns:
{
title: 'My Game',
appName: 'my-game',
version: '1.0.0',
width: 1280,
height: 720,
// ... all game settings
}incrementBuildNumber()
Increment and get build number:
javascript
const buildNum = gemshell.build.incrementBuildNumber();
gemshell.log(`Build #${buildNum}`);getPaths()
Get build paths:
javascript
const paths = gemshell.build.getPaths();
// Returns:
{
source: '/path/to/game', // Original game folder
output: '/path/to/build/output', // Final build output
temp: '/path/to/temp', // Temporary build folder
assets: '/path/to/assets' // Assets being processed
}Example: Build Banner
javascript
module.exports = {
name: 'Build Banner',
version: '1.0.0',
async onModifyAssets(context, settings) {
const info = gemshell.build.getInfo();
const config = gemshell.build.getGameConfig();
const banner = `
/*
* ${config.title} v${config.version}
* Build #${info.buildNumber}
* Built: ${info.timestamp}
* Platform: ${info.platform}-${info.arch}
* GemShell: ${info.gemshellVersion}
*/
`;
// Add banner to main JS file
const jsFiles = gemshell.glob('*.js');
if (jsFiles.length > 0) {
gemshell.transform.prependToFile(jsFiles[0], banner);
}
}
};Example: Platform-Specific Assets
javascript
module.exports = {
name: 'Platform Assets',
version: '1.0.0',
async onModifyAssets(context, settings) {
const info = gemshell.build.getInfo();
const paths = gemshell.build.getPaths();
// Copy platform-specific files
const platformDir = `assets/${info.platform}`;
if (gemshell.fs.exists(platformDir)) {
const files = gemshell.fs.list(platformDir);
for (const file of files) {
gemshell.fs.copy(
`${platformDir}/${file}`,
`assets/${file}`
);
}
gemshell.log(`Copied ${files.length} platform-specific assets`);
}
}
};Example: Inject Build Info to Game
javascript
module.exports = {
name: 'Build Info Injector',
version: '1.0.0',
async onModifyAssets(context, settings) {
const info = gemshell.build.getInfo();
const config = gemshell.build.getGameConfig();
const buildInfo = {
version: config.version,
buildNumber: info.buildNumber,
platform: info.platform,
arch: info.arch,
timestamp: info.timestamp,
gemshell: info.gemshellVersion
};
// Write as JSON file
gemshell.fs.writeJson('build-info.json', buildInfo);
// Also inject as global variable
const script = `<script>window.BUILD_INFO = ${JSON.stringify(buildInfo)};</script>`;
gemshell.transform.injectIntoHtml(script, 'head');
gemshell.log('Build info injected');
}
};