build: add import/order eslint rule (#44085) * build: add import/order eslint rule * chore: run lint:js --fix
		
			
				
	
	
		
			85 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
	
		
			2.9 KiB
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { GitProcess } from 'dugite';
 | 
						|
import * as semver from 'semver';
 | 
						|
 | 
						|
import { ELECTRON_DIR } from '../lib/utils';
 | 
						|
 | 
						|
export enum PreType {
 | 
						|
  NONE = 'none',
 | 
						|
  PARTIAL = ' partial',
 | 
						|
  FULL = 'full',
 | 
						|
}
 | 
						|
 | 
						|
const getCurrentDate = () => {
 | 
						|
  const d = new Date();
 | 
						|
  const dd = `${d.getDate()}`.padStart(2, '0');
 | 
						|
  const mm = `${d.getMonth() + 1}`.padStart(2, '0');
 | 
						|
  const yyyy = d.getFullYear();
 | 
						|
  return `${yyyy}${mm}${dd}`;
 | 
						|
};
 | 
						|
 | 
						|
export const isNightly = (v: string) => v.includes('nightly');
 | 
						|
export const isAlpha = (v: string) => v.includes('alpha');
 | 
						|
export const isBeta = (v: string) => v.includes('beta');
 | 
						|
export const isStable = (v: string) => {
 | 
						|
  const parsed = semver.parse(v);
 | 
						|
  return !!(parsed && parsed.prerelease.length === 0);
 | 
						|
};
 | 
						|
 | 
						|
export async function nextAlpha (v: string) {
 | 
						|
  const next = semver.coerce(semver.clean(v));
 | 
						|
  const tagBlob = await GitProcess.exec(['tag', '--list', '-l', `v${next}-alpha.*`], ELECTRON_DIR);
 | 
						|
  const tags = tagBlob.stdout.split('\n').filter(e => e !== '');
 | 
						|
  tags.sort((t1, t2) => {
 | 
						|
    const a = parseInt(t1.split('.').pop()!, 10);
 | 
						|
    const b = parseInt(t2.split('.').pop()!, 10);
 | 
						|
    return a - b;
 | 
						|
  });
 | 
						|
 | 
						|
  // increment the latest existing alpha tag or start at alpha.1 if it's a new alpha line
 | 
						|
  return tags.length === 0 ? `${next}-alpha.1` : semver.inc(tags.pop()!, 'prerelease')!;
 | 
						|
}
 | 
						|
 | 
						|
export async function nextBeta (v: string) {
 | 
						|
  const next = semver.coerce(semver.clean(v));
 | 
						|
  const tagBlob = await GitProcess.exec(['tag', '--list', '-l', `v${next}-beta.*`], ELECTRON_DIR);
 | 
						|
  const tags = tagBlob.stdout.split('\n').filter(e => e !== '');
 | 
						|
  tags.sort((t1, t2) => {
 | 
						|
    const a = parseInt(t1.split('.').pop()!, 10);
 | 
						|
    const b = parseInt(t2.split('.').pop()!, 10);
 | 
						|
    return a - b;
 | 
						|
  });
 | 
						|
 | 
						|
  // increment the latest existing beta tag or start at beta.1 if it's a new beta line
 | 
						|
  return tags.length === 0 ? `${next}-beta.1` : semver.inc(tags.pop()!, 'prerelease')!;
 | 
						|
}
 | 
						|
 | 
						|
export async function nextNightly (v: string) {
 | 
						|
  let next = semver.valid(semver.coerce(v));
 | 
						|
  const pre = `nightly.${getCurrentDate()}`;
 | 
						|
 | 
						|
  const branch = (await GitProcess.exec(['rev-parse', '--abbrev-ref', 'HEAD'], ELECTRON_DIR)).stdout.trim();
 | 
						|
  if (branch === 'main') {
 | 
						|
    next = semver.inc(await getLastMajorForMain(), 'major');
 | 
						|
  } else if (isStable(v)) {
 | 
						|
    next = semver.inc(next!, 'patch');
 | 
						|
  }
 | 
						|
 | 
						|
  return `${next}-${pre}`;
 | 
						|
}
 | 
						|
 | 
						|
async function getLastMajorForMain () {
 | 
						|
  let branchNames;
 | 
						|
  const result = await GitProcess.exec(['branch', '-a', '--remote', '--list', 'origin/[0-9]*-x-y'], ELECTRON_DIR);
 | 
						|
  if (result.exitCode === 0) {
 | 
						|
    branchNames = result.stdout.trim().split('\n');
 | 
						|
    const filtered = branchNames.map(b => b.replace('origin/', ''));
 | 
						|
    return getNextReleaseBranch(filtered);
 | 
						|
  } else {
 | 
						|
    throw new Error('Release branches could not be fetched.');
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function getNextReleaseBranch (branches: string[]) {
 | 
						|
  const converted = branches.map(b => b.replace(/-/g, '.').replace('x', '0').replace('y', '0'));
 | 
						|
  return converted.reduce((v1, v2) => semver.gt(v1, v2) ? v1 : v2);
 | 
						|
}
 |