* added js
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const axios = require('axios').default;
|
||||
const jszip = require('jszip');
|
||||
|
||||
// Replace these with your details
|
||||
const GITHUB_SERVER_URL = process.env.GITHUB_SERVER_URL;
|
||||
const GITHUB_REPOSITORY = process.env.GITHUB_REPOSITORY;
|
||||
const GITHUB_REF_NAME = process.env.GITHUB_REF_NAME;
|
||||
|
||||
// Set the path to your bin directory
|
||||
const binPath = process.env.bin_path || 'bin';
|
||||
const zipName = process.env.zip_name || 'release.zip';
|
||||
const relName = process.env.rel_name || 'Content Release';
|
||||
const relDesc = process.env.rel_desc || 'Automatic Content Release from GITEA workflow';
|
||||
const tagName = process.env.tag_name || 'automatic-release';
|
||||
|
||||
const accessToken = process.env.access_token; // Make sure to set this to your Gitea access token
|
||||
|
||||
// Zip the files in the bin directory
|
||||
const zip = new jszip();
|
||||
const zipFolder = (srcFolder, zipFolder) => {
|
||||
const items = fs.readdirSync(srcFolder);
|
||||
items.forEach(item => {
|
||||
const fullPath = path.join(srcFolder, item);
|
||||
const stat = fs.statSync(fullPath);
|
||||
if (stat.isFile()) {
|
||||
const data = fs.readFileSync(fullPath);
|
||||
zipFolder.file(item, data);
|
||||
} else if (stat.isDirectory()) {
|
||||
const childZipFolder = zipFolder.folder(item);
|
||||
zipFolder(fullPath, childZipFolder);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
zipFolder(binPath, zip);
|
||||
|
||||
zip.generateNodeStream({ streamFiles: true })
|
||||
.pipe(fs.createWriteStream(zipName))
|
||||
.on('finish', function () {
|
||||
console.log("Zip file written.");
|
||||
|
||||
// Create a release
|
||||
const releaseUrl = `${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases`;
|
||||
const headers = {
|
||||
'Authorization': `token ${accessToken}`
|
||||
};
|
||||
const data = {
|
||||
"body": relDesc,
|
||||
"name": relName,
|
||||
"draft": true,
|
||||
"prerelease": true,
|
||||
"tag_name": tagName,
|
||||
"target_commitish": GITHUB_REF_NAME
|
||||
};
|
||||
|
||||
axios.post(releaseUrl, data, { headers })
|
||||
.then(response => {
|
||||
const release = response.data;
|
||||
const releaseId = release.id;
|
||||
|
||||
// Create a release attachment
|
||||
const attachmentUrl = `${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${releaseId}/assets`;
|
||||
const formData = new FormData();
|
||||
formData.append('attachment', fs.createReadStream(zipName), zipName);
|
||||
|
||||
axios.post(attachmentUrl, formData, {
|
||||
headers: {
|
||||
...headers,
|
||||
...formData.getHeaders()
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
console.log("Attachment uploaded successfully.");
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Failed to upload attachment:", error.response.data);
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error("Failed to create release:", error.response.data);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user