deskflow/.github/actions/build-number/main.js
Kyle Bloom 446b0a2e95
Update workflows (#7283)
* Update test actions

* Format stale issues

* Format jira issues workflow

* Format changelog check workflow

* Format build workflows

* Format create build

Also add make full action to remove core installs

* Format codeql analysis

* Add .nvmrc

* Update changelog

* Add concurrency group to CodeQL

* sudo install

* Update to windows latest

* Upgrade fedora distro list

* Add arch to runtime matrix

* Fix path for m1 builds

* Add enterprise and business flags
2023-09-25 17:26:06 +01:00

222 lines
No EOL
5.3 KiB
JavaScript

const core = require('@actions/core');
const { Octokit } = require("@octokit/core");
const fs = require('fs');
function VersionPart(part) {
var self = this;
var m_prefix = '';
var m_suffix = '';
var m_number = 0;
self.setNumber = function(number) {
if (!isNaN(number)) {
m_number = number;
}
}
self.getNumber = function() {
return m_number;
}
self.getSuffix = function(){
return m_suffix;
}
self.toString = function() {
return m_prefix + m_number.toString() + m_suffix;
}
self.next = function() {
m_number += 1;
}
function parsePartPrefix(part) {
if (isNaN(part[0])) {
for (var i = 0; i < part.length; ++i) {
if (!isNaN(part[i])) {
break;
}
m_prefix += part[i];
}
}
}
function parsePartNumber(part) {
let number = 0;
if (m_prefix.length > 0){
number = parseInt(part.substring(m_prefix.length));
}
else{
number = parseInt(part);
}
self.setNumber(number);
}
function parsePartSuffix(part) {
let items = part.split('-');
if (items.length == 2) {
m_suffix = '-' + items[1];
}
}
self.setPart = function(part) {
if (part && part.length > 0){
parsePartPrefix(part);
parsePartNumber(part);
parsePartSuffix(part);
}
}
self.setPart(part);
}
function Version(version) {
const PARTS_DELIMITER = '.';
var m_major = new VersionPart();
var m_minor = new VersionPart();
var m_patch = new VersionPart();
var m_build = new VersionPart();
this.toString = function() {
return ( m_major.toString() + PARTS_DELIMITER +
m_minor.toString() + PARTS_DELIMITER +
m_patch.toString() + PARTS_DELIMITER +
m_build.toString());
}
this.isEmpty = function(){
return (!this.getMajor() && !this.getMinor() && !this.getPatch());
}
this.nextBuild = function() {
m_build.next();
}
function init() {
if (version)
{
let versionParts = version.split(PARTS_DELIMITER);
if (versionParts.length == 3) {
m_major.setPart(versionParts[0]);
m_minor.setPart(versionParts[1]);
m_build.setPart(versionParts[2]);
m_patch.setNumber(m_build.getNumber());
m_build.setNumber(0);
}
else if (versionParts.length == 4) {
m_major.setPart(versionParts[0]);
m_minor.setPart(versionParts[1]);
m_patch.setPart(versionParts[2]);
m_build.setPart(versionParts[3]);
}
else {
core.setFailed('ERROR: wrong version number <' + version + '>');
}
}
}
this.getMajor = function() {
return m_major.getNumber();
}
this.getMinor = function() {
return m_minor.getNumber();
}
this.getPatch = function() {
return m_patch.getNumber();
}
this.getStage = function(){
return m_build.getSuffix();
}
this.isSamePatch = function(version) {
return (this.getMajor() == version.getMajor() &&
this.getMinor() == version.getMinor() &&
this.getPatch() == version.getPatch());
}
init();
}
function getOptionValue(source, option) {
let start = source.indexOf(option);
if (start != -1) {
start += option.length + 1;
let end = source.indexOf(')', start);
return source.toString('utf8', start, end).replace(/\"/g, '').trim();
}
else{
core.setFailed("ERROR: Can't find option <" + option + ">");
}
}
async function getVersionApi()
{
const octokit = new Octokit({});
let response = await octokit.request('GET /repos/{owner}/{repo}/releases?per_page=100', {
owner: 'symless',
repo: 'synergy-core'
});
return response.data;
}
async function getVersionsFromGithub(cmakeVersion)
{
let gitVersion = new Version();
let versions = await getVersionApi();
for (let i = 0; i < versions.length; ++i) {
let version = new Version(versions[i].tag_name);
if (version.isSamePatch(cmakeVersion)) {
gitVersion = version;
break;
}
}
return gitVersion;
}
function getVersionFromFile(){
let options = fs.readFileSync('cmake/Version.cmake');
let major = getOptionValue(options, 'SYNERGY_VERSION_MAJOR');
let minor = getOptionValue(options, 'SYNERGY_VERSION_MINOR');
let patch = getOptionValue(options, 'SYNERGY_VERSION_PATCH');
let stage = getOptionValue(options, 'SYNERGY_VERSION_STAGE');
return new Version(major + '.' + minor + '.' + patch + '-' + stage);
}
async function main()
{
try {
let version = null;
let cmakeVersion = getVersionFromFile();
let gitVersion = await getVersionsFromGithub(cmakeVersion);
console.log('INFO: Version from Git: <' + gitVersion.toString() + '>');
console.log('INFO: Version from cmake: <' + cmakeVersion.toString() + '>');
if (gitVersion.isEmpty()) {
version = cmakeVersion;
}
else {
gitVersion.nextBuild();
version = gitVersion;
}
console.log('INFO: Generate build version: <' + version.toString() + '>');
core.setOutput('next-build', version.toString());
} catch (error) {
core.setFailed(error.message);
}
};
main();