Skip to content

Commit

Permalink
feat: overwrite default files when needed
Browse files Browse the repository at this point in the history
improve file readability
  • Loading branch information
pathurs committed Sep 26, 2020
1 parent a5b2424 commit d7b2d84
Show file tree
Hide file tree
Showing 7 changed files with 186 additions and 160 deletions.
65 changes: 27 additions & 38 deletions default/.github/workflows/nodejs-master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ jobs:

steps:
- name: Checkout Repository
uses: actions/checkout@v1
uses: actions/checkout@v2.3.3

- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v2.1.1
with:
node-version: 12
node-version: 14

- name: Install dependencies
run: |
Expand All @@ -44,14 +44,18 @@ jobs:
needs: [lint]
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [12.x, 13.x, 14.x]

steps:
- name: Checkout Repository
uses: actions/checkout@v1
uses: actions/checkout@v2.3.3

- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v2.1.1
with:
node-version: 12
node-version: ${{ matrix.node-version }}

- name: Install dependencies
run: |
Expand All @@ -74,10 +78,10 @@ jobs:

steps:
- name: Checkout Repository
uses: actions/checkout@v1
uses: actions/checkout@v2.3.3

- name: Setup Node.js with ${{ matrix.node-version }}
uses: actions/setup-node@v1
uses: actions/setup-node@v2.1.1
with:
node-version: ${{ matrix.node-version }}

Expand All @@ -98,20 +102,20 @@ jobs:

steps:
- name: Checkout Repository
uses: actions/checkout@v1
uses: actions/checkout@v2.3.3

- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v2.1.1
with:
node-version: 12
node-version: 14

- name: Install dependencies
run: |
# Run NPM Clean Install
npm ci
- name: Run Test Coverage and Code Climate
uses: paambaati/codeclimate-action@v2.3.0
uses: paambaati/codeclimate-action@v2.7.1
with:
coverageCommand: npm run coverage
debug: true
Expand All @@ -123,36 +127,21 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v1
uses: actions/checkout@v2.3.3

- name: Setup Node.js
uses: actions/setup-node@v1
uses: actions/setup-node@v2.1.1
with:
node-version: 12
node-version: 14

- name: Install dependencies
run: npm ci

- name: Set Git Signing Key
run: |
# Decrypt the git_gpg_keys.asc.enc key into git_gpg_keys.asc
gpg --output /tmp/git_gpg_keys.asc --decrypt --batch --passphrase ${{ secrets.GPG_DECRYPT_PASSPHRASE }} git_gpg_keys.asc.enc
# Make sure only the current user can read the keys
chmod 600 /tmp/git_gpg_keys.asc
# Import the gpg key
gpg --batch --yes --import /tmp/git_gpg_keys.asc
# Create a script that will pass the passphrase to the gpg CLI called by git
echo '/usr/bin/gpg2 --passphrase ${{ secrets.GPG_PASSPHRASE }} --batch --no-tty "$@"' > /tmp/gpg-with-passphrase
# Make the script executable
chmod +x /tmp/gpg-with-passphrase
# Configure git to use the script that passes the passphrase
git config gpg.program "/tmp/gpg-with-passphrase"
# Configure git to sign the commits and tags
git config commit.gpgsign true
# Configure git to use your GPG key
git config --global user.signingkey ${{ secrets.GPG_KEY_ID }}
- name: Release
run: |
npm run distribute
npx semantic-release
- name: Run Build
run: npm run distribute

- name: Zip Build
run: zip -r build.zip ./distribute/

- name: Run Semantic Release
run: npx semantic-release
28 changes: 14 additions & 14 deletions source/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import { cleanBuildDirectory } from './clean';
import {
absoluteRootDirectory,
absoluteRootGeneratedTsconfigJsonPath,
absoluteRootSourceDeclarationFilesGlob,
absoluteRootSourceDirectory,
absoluteRootSourceTestFilesGlob,
absoluteRootSourceTypeScriptFilesGlob,
absoluteRootTsconfigJsonPath
absoluteRootTSConfigJsonPath,
absoluteSourceDeclarationFilesGlob,
absoluteSourceDirectory,
absoluteSourceTestFilesGlob,
absoluteSourceTypeScriptFilesGlob
} from './variables';
import {
copyFiles,
Expand All @@ -18,21 +18,21 @@ import {
wasCalledFromCLI
} from './helpers';

interface TSConfig {
files?: string[];
}

function generateTsconfig(includeTestFiles = false): void {
const tsconfigString = fs.readFileSync(absoluteRootTsconfigJsonPath, 'utf8');
interface TSConfig {
files?: string[];
}

const tsconfigString = fs.readFileSync(absoluteRootTSConfigJsonPath, 'utf8');
const tsconfigData = <TSConfig>JSON.parse(tsconfigString);

const filesGlob = includeTestFiles
? [
absoluteRootSourceTypeScriptFilesGlob
absoluteSourceTypeScriptFilesGlob
]
: [
absoluteRootSourceTypeScriptFilesGlob,
`!${absoluteRootSourceTestFilesGlob}`
absoluteSourceTypeScriptFilesGlob,
`!${absoluteSourceTestFilesGlob}`
];

const files = getFilePaths(filesGlob);
Expand Down Expand Up @@ -66,7 +66,7 @@ function buildTypeScript(outputDirectoryPath: string, includeTestFiles = false):
outputDirectoryPath
]);

copyFiles(absoluteRootSourceDeclarationFilesGlob, absoluteRootSourceDirectory, outputDirectoryPath);
copyFiles(absoluteSourceDeclarationFilesGlob, absoluteSourceDirectory, outputDirectoryPath);
}

export function buildTypeScriptBuild(): void {
Expand Down
12 changes: 6 additions & 6 deletions source/clean.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import del from 'del';
import {
absoluteRootBuildDirectory,
absoluteRootCoverageDirectory,
absoluteRootDistributeDirectory
absoluteBuildDirectory,
absoluteCoverageDirectory,
absoluteDistributeDirectory
} from './variables';
import {
log,
Expand All @@ -18,15 +18,15 @@ function cleanDirectory(directoryPath: string): string[] {
}

export function cleanBuildDirectory(): string[] {
return cleanDirectory(absoluteRootBuildDirectory);
return cleanDirectory(absoluteBuildDirectory);
}

export function cleanDistributeDirectory(): string[] {
return cleanDirectory(absoluteRootDistributeDirectory);
return cleanDirectory(absoluteDistributeDirectory);
}

export function cleanCoverageDirectory(): string[] {
return cleanDirectory(absoluteRootCoverageDirectory);
return cleanDirectory(absoluteCoverageDirectory);
}

export function clean(): string[] {
Expand Down
36 changes: 22 additions & 14 deletions source/distribute.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,16 @@ import * as path from 'path';
import { buildTypeScriptDistribute } from './build';
import { cleanDistributeDirectory } from './clean';
import {
absoluteRootDefaultDirectory,
absoluteRootDefaultFilesGlob,
absoluteDefaultDirectory,
absoluteDefaultFilesGlob,
absoluteDefaultForceOverwriteFilePaths,
absoluteDistributeDefaultDirectory,
absoluteDistributeDefaultFilesGlob,
absoluteDistributeEssentialDirectory,
absoluteDistributePackageJsonPath,
absoluteRootDirectory,
absoluteRootDistributeDefaultDirectory,
absoluteRootDistributeDefaultFilesGlob,
absoluteRootDistributeEssentialDirectory,
absoluteRootDistributePackageJsonPath,
absoluteRootEssentialFilesGlobs,
absoluteRootEssentialFilePaths,
absoluteRootForceOverwriteFilePaths,
renamedPrefix
} from './variables';
import {
Expand All @@ -20,20 +22,21 @@ import {
wasCalledFromCLI
} from './helpers';

interface PackageJson {
scripts?: { [key: string]: string; };
function copyOverwritableFilesToDefaultDirectory(): void {
copyFiles(absoluteRootForceOverwriteFilePaths, absoluteRootDirectory, absoluteDefaultDirectory);
}

function copyFilesToDistributeDirectory(): void {
copyFiles(absoluteRootDefaultFilesGlob, absoluteRootDefaultDirectory, absoluteRootDistributeDefaultDirectory);
copyFiles(absoluteRootEssentialFilesGlobs, absoluteRootDirectory, absoluteRootDistributeEssentialDirectory);
copyFiles(absoluteDefaultFilesGlob, absoluteDefaultDirectory, absoluteDistributeDefaultDirectory);
copyFiles(absoluteDefaultForceOverwriteFilePaths, absoluteRootDirectory, absoluteDistributeDefaultDirectory);
copyFiles(absoluteRootEssentialFilePaths, absoluteRootDirectory, absoluteDistributeEssentialDirectory);
}

/**
* Rename all default files because NPM ignores some files by default and cannot be overrided.
*/
function renameDistributeDefaultFiles(): void {
const distributeDefaultFilePaths = getFilePaths(absoluteRootDistributeDefaultFilesGlob);
const distributeDefaultFilePaths = getFilePaths(absoluteDistributeDefaultFilesGlob);

for (const defaultFilePath of distributeDefaultFilePaths) {
const parsedPath = path.parse(defaultFilePath);
Expand All @@ -47,9 +50,13 @@ function renameDistributeDefaultFiles(): void {
}

function packageJsonAddInstallScriptToDistribute(): void {
interface PackageJson {
scripts?: { [key: string]: string; };
}

// Only add install script to Config package
if (process.env.COLONISE_PACKAGE_NAME === 'Config') {
const packageJsonString = fs.readFileSync(absoluteRootDistributePackageJsonPath, 'utf8');
const packageJsonString = fs.readFileSync(absoluteDistributePackageJsonPath, 'utf8');
const packageJsonData = <PackageJson>JSON.parse(packageJsonString);

packageJsonData.scripts = packageJsonData.scripts ?? {};
Expand All @@ -58,11 +65,12 @@ function packageJsonAddInstallScriptToDistribute(): void {
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
const modifiedPackageJsonString = JSON.stringify(packageJsonData, undefined, 4);

fs.writeFileSync(absoluteRootDistributePackageJsonPath, modifiedPackageJsonString);
fs.writeFileSync(absoluteDistributePackageJsonPath, modifiedPackageJsonString);
}
}

export function distributeFiles(): void {
copyOverwritableFilesToDefaultDirectory();
copyFilesToDistributeDirectory();
renameDistributeDefaultFiles();
packageJsonAddInstallScriptToDistribute();
Expand Down
38 changes: 19 additions & 19 deletions source/install.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ import * as fs from 'fs';
import * as path from 'path';
import { default as rootPath } from 'app-root-path';
import {
absoluteCurrentDirectory,
relativeDefaultDirectory,
absoluteCurrentDefaultDirectory,
absoluteCurrentDefaultFilesGlob,
absoluteRootForceOverwriteFilePaths,
renamedPrefix
} from './variables';
import {
Expand All @@ -14,15 +15,11 @@ import {
} from './helpers';

function unrenameDistributeDefaultFiles(): void {
const currentDefaultDirectory = path.join(absoluteCurrentDirectory, relativeDefaultDirectory);

if (!fs.existsSync(currentDefaultDirectory)) {
throw new Error(`Could not find default configuration path '${currentDefaultDirectory}'.`);
if (!fs.existsSync(absoluteCurrentDefaultDirectory)) {
throw new Error(`Could not find default configuration path '${absoluteCurrentDefaultDirectory}'.`);
}

const currentDefaultFilesGlob = path.join(currentDefaultDirectory, '/**/*');

const defaultFilePaths = getFilePaths(currentDefaultFilesGlob);
const defaultFilePaths = getFilePaths(absoluteCurrentDefaultFilesGlob);

for (const defaultFilePath of defaultFilePaths) {
const parsedPath = path.parse(defaultFilePath);
Expand All @@ -36,23 +33,26 @@ function unrenameDistributeDefaultFiles(): void {
}

function copyDefaultFilesToRoot(): void {
const currentDefaultDirectory = path.join(absoluteCurrentDirectory, relativeDefaultDirectory);

if (!fs.existsSync(currentDefaultDirectory)) {
throw new Error(`Could not find default configuration path '${currentDefaultDirectory}'.`);
if (!fs.existsSync(absoluteCurrentDefaultDirectory)) {
throw new Error(`Could not find default configuration path '${absoluteCurrentDefaultDirectory}'.`);
}

const currentDefaultFilesGlob = path.join(currentDefaultDirectory, '/**/*');

const absoluteDefaultFilePaths = getFilePaths(currentDefaultFilesGlob);
const absoluteDefaultFilePaths = getFilePaths(absoluteCurrentDefaultFilesGlob);

for (const absoluteDefaultFilePath of absoluteDefaultFilePaths) {
const relativeFilePath = absoluteDefaultFilePath.replace(currentDefaultDirectory, '');
const relativeFilePath = absoluteDefaultFilePath.replace(absoluteCurrentDefaultDirectory, '');

const absoluteFilePath = path.join(rootPath.path, relativeFilePath);

if (fs.existsSync(absoluteFilePath)) {
warn(`Failed to copy file '${relativeFilePath}' because it already exists. A manual update may be required.`);
if (absoluteRootForceOverwriteFilePaths.includes(absoluteFilePath)) {
log(`Copying and overwriting file '${relativeFilePath}' to '${absoluteFilePath}'.`);

fs.copyFileSync(absoluteDefaultFilePath, absoluteFilePath);
}
else {
warn(`Failed to copy file '${relativeFilePath}' because it already exists. A manual update may be required.`);
}
}
else {
const directoryPath = path.dirname(absoluteFilePath);
Expand All @@ -61,7 +61,7 @@ function copyDefaultFilesToRoot(): void {

log(`Copying file '${relativeFilePath}' to '${absoluteFilePath}'.`);

fs.copyFileSync(absoluteDefaultFilePath, absoluteFilePath);
fs.copyFileSync(absoluteDefaultFilePath, absoluteFilePath, fs.constants.COPYFILE_EXCL);
}
}
}
Expand Down
5 changes: 2 additions & 3 deletions source/lint.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { CLIEngine } from 'eslint';
import {
absoluteRootEslintRCPath,
absoluteRootSourceTypeScriptFilesGlob
absoluteSourceTypeScriptFilesGlob
} from './variables';
import {
executeCommand,
Expand Down Expand Up @@ -51,9 +51,8 @@ export function lintTypeScript(): void {
reportMissingLintRules(eslintConfig);

executeCommand('eslint', [
// '--fix',
'--cache',
absoluteRootSourceTypeScriptFilesGlob
absoluteSourceTypeScriptFilesGlob
]);
}

Expand Down
Loading

0 comments on commit d7b2d84

Please sign in to comment.