feat(webhooks): implement version auto-update on prod branch push

Add functionality to automatically update the version.json file when a push is made to the 'prod' branch of the dashApp repository. The update includes incrementing the version number and updating the timestamp. Additionally, the changes are committed and pushed back to the repository, enhancing the deployment process.
This commit is contained in:
sebseb7
2025-08-06 13:15:17 +02:00
parent 7228d4b763
commit f683f9d80a

120
x.js
View File

@@ -635,6 +635,126 @@ app.post('/releasehook_kjfhdkf987987', async (req, res) => {
}); });
return; // Exit early to avoid double response return; // Exit early to avoid double response
} }
if(payload && payload.repository && payload.repository.name == 'dashApp'){
// Check if push was to 'prod' branch
const targetBranch = 'prod';
const ref = payload.ref || '';
const branchName = ref.replace('refs/heads/', '');
if (branchName !== targetBranch) {
logMessage(`dashApp push to branch '${branchName}' - skipping version update (only updates on '${targetBranch}' branch)`);
if (!responseSent) {
responseSent = true;
res.status(200).json({ success: true, repository: 'dashApp', message: 'No action taken - not prod branch' });
}
return;
}
logMessage(`dashApp push to ${targetBranch} branch detected - updating version.json`);
const repoPath = '/home/seb/src/dashApp';
const versionFilePath = path.join(repoPath, 'version.json');
// Function to update version.json and commit changes
const updateVersionFile = async () => {
try {
// Read current version.json
let currentVersion = { v: '0.0.0', d: '' };
if (fs.existsSync(versionFilePath)) {
const versionContent = fs.readFileSync(versionFilePath, 'utf8');
try {
currentVersion = JSON.parse(versionContent);
} catch (parseError) {
logMessage(`Error parsing version.json, using defaults: ${parseError.message}`, 'warn');
}
} else {
logMessage('version.json not found, creating new file with initial version');
}
// Increment version number
const versionParts = currentVersion.v.split('.');
if (versionParts.length >= 3) {
const patch = parseInt(versionParts[2]) || 0;
versionParts[2] = (patch + 1).toString();
currentVersion.v = versionParts.join('.');
} else {
// Fallback if version format is unexpected
const lastNum = parseInt(currentVersion.v.replace(/\D/g, '')) || 0;
currentVersion.v = `0.0.${lastNum + 1}`;
}
// Update date in format YYYYMMDDHHMM
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hour = String(now.getHours()).padStart(2, '0');
const minute = String(now.getMinutes()).padStart(2, '0');
currentVersion.d = `${year}${month}${day}${hour}${minute}`;
// Write updated version.json
const updatedContent = JSON.stringify(currentVersion);
fs.writeFileSync(versionFilePath, updatedContent, 'utf8');
logMessage(`Updated version.json: ${updatedContent}`);
// Git commands to commit and push
const gitCommands = [
`cd ${repoPath}`,
'git add version.json',
`git commit -m "Auto-update version to ${currentVersion.v} [${currentVersion.d}]"`,
`git push origin ${targetBranch}`
].join(' && ');
logMessage(`Executing git commands for dashApp: ${gitCommands}`);
// Execute git commands
const { stdout: gitOutput, stderr: gitError } = await execCmd(gitCommands, {
cwd: repoPath,
timeoutMs: 30000
});
if (gitOutput) {
logMessage(`Git output for dashApp: ${gitOutput.trim()}`);
}
if (gitError) {
logMessage(`Git stderr for dashApp: ${gitError.trim()}`, 'warn');
}
logMessage(`Successfully updated and pushed version.json for dashApp: v${currentVersion.v}`);
if (!responseSent) {
responseSent = true;
res.status(200).json({
success: true,
repository: 'dashApp',
version: currentVersion.v,
date: currentVersion.d,
message: 'Version updated and committed'
});
}
} catch (error) {
logMessage(`Error updating version.json for dashApp: ${error.message}`, 'error');
if (error.stack) {
logMessage(`Stack trace: ${error.stack}`, 'error');
}
if (!responseSent) {
responseSent = true;
return res.status(500).json({
error: 'Version update failed',
details: error.message
});
}
}
};
// Execute the version update
updateVersionFile();
return; // Exit early to avoid double response
}
// If we get here, no repository matched // If we get here, no repository matched
logMessage(`No handler found for repository: ${payload?.repository?.name || 'unknown'}`, 'warn'); logMessage(`No handler found for repository: ${payload?.repository?.name || 'unknown'}`, 'warn');