Skip to content

Commit

Permalink
feat(npm): options.force
Browse files Browse the repository at this point in the history
  • Loading branch information
Airkro committed Jul 4, 2023
1 parent 8de3241 commit 9d8b88d
Show file tree
Hide file tree
Showing 11 changed files with 354 additions and 343 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/bring-it.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
uses: airkro/bring-it@actions
with:
npm-token: ${{ secrets.NPM_TOKEN }}
publish-command: npx @bring-it/npm@latest npm
publish-command: npx @bring-it/npm@0.2.0 npm
custom-command: |
cd packages
mkdir -p sftp/dist
Expand Down
560 changes: 276 additions & 284 deletions package-lock.json

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@
"packages/*"
],
"devDependencies": {
"@nice-move/cli": "^0.10.8",
"@nice-move/eslint-config-base": "^0.9.14",
"@nice-move/cli": "^0.10.9",
"@nice-move/eslint-config-base": "^0.9.15",
"@nice-move/prettier-config": "^0.8.1",
"best-shot": "^0.3.6",
"eslint": "^8.43.0",
"best-shot": "^0.4.1",
"eslint": "^8.44.0",
"garou": "^0.6.11",
"playwright-core": "^1.35.1",
"prettier": "^2.8.8"
Expand Down
8 changes: 4 additions & 4 deletions packages/npm/lib/cmd.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@ export function builder(cli) {
default: false,
type: 'boolean',
})
.option('branch', {
alias: 'b',
.option('force', {
alias: 'f',
describe: 'Skip branch checking',
default: false,
type: 'boolean',
});
}

export function handler({ preview, branch }) {
action({ preview, branch });
export function handler({ preview, force }) {
action({ preview, force });
}
8 changes: 3 additions & 5 deletions packages/npm/lib/npm/action.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,21 @@ import { logger } from './logger.mjs';
import { scan } from './scan.mjs';
import { execX } from './utils.mjs';

export async function action({ preview = false, branch = false } = {}) {
if (!(await check({ branch }))) {
export async function action({ preview = false, force = false } = {}) {
if (!(await check({ force }))) {
process.exitCode = 1;

return false;
}

const list = await scan();
const list = await scan({ force });

if (list.length === 0) {
return false;
}

if (preview) {
logger.info("Won't publish in preview mode");

return false;
}

for (const { dir, name } of list) {
Expand Down
6 changes: 3 additions & 3 deletions packages/npm/lib/npm/check.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
} from './git.mjs';
import { logger } from './logger.mjs';

export async function check({ branch }) {
export async function check({ force }) {
logger.task('Checking the working directory...');

try {
Expand All @@ -28,11 +28,11 @@ export async function check({ branch }) {
return false;
}

if (!branch && !(await branchCanRelease())) {
if (!force && !(await branchCanRelease())) {
return false;
}

if (!(await isGitClean())) {
if ((process.env.CI ? true : !force) && !(await isGitClean())) {
return false;
}
} catch (error) {
Expand Down
69 changes: 41 additions & 28 deletions packages/npm/lib/npm/git.mjs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { EOL } from 'node:os';
import { resolve } from 'node:path';

import { logger } from './logger.mjs';
Expand Down Expand Up @@ -62,15 +61,22 @@ export function isGitRoot() {

export function isGitClean() {
return doAction(
Git('status', '--porcelain').then((stdout) => {
if (stdout.length === 0) {
return true;
}

logger.info(EOL, stdout);

return false;
}),
Git('status', '--porcelain')
.then((stdout) =>
stdout
.split('\n')
.map((line) => line.trim())
.filter((line) => line && line !== 'M .npmrc'),
)
.then((stdout) => {
if (stdout.length === 0) {
return true;
}

console.info(stdout.join('\n'));

return false;
}),
'Current directory is a clean repo',
'Current directory is not a clean repo',
);
Expand Down Expand Up @@ -98,32 +104,39 @@ export async function branchCanRelease() {
);
}

export function getFileFromLastCommit(filename) {
export function getFileContentFromLastCommit(filename) {
return Git('show', `HEAD~1:${filename}`);
}

export async function getLastCommitFiles() {
const io = Git('cat-file', '-t', 'HEAD~1').then(
() =>
Git(
'diff',
'HEAD~1',
'HEAD',
'--name-only',
'--ignore-blank-lines',
'--ignore-cr-at-eol',
'--ignore-space-at-eol',
'--diff-filter=d',
'package.json',
'*/package.json',
),
() => Git('ls-files', 'package.json', '*/package.json'),
function getChangedPackageFiles() {
return Git(
'diff',
'HEAD~1',
'HEAD',
'--name-only',
'--ignore-blank-lines',
'--ignore-cr-at-eol',
'--ignore-space-at-eol',
'--diff-filter=d',
'package.json',
'*/package.json',
);
}

function getAllPackages() {
return Git('ls-files', 'package.json', '*/package.json');
}

export async function getLastCommitFiles({ force }) {
const io = await Git('cat-file', '-t', 'HEAD~1').then(
force ? getAllPackages : getChangedPackageFiles,
getAllPackages,
);

const list = await io.then((raw) => (raw ? raw.split('\n') : []));

for (const pkg of list) {
logger.okay('[Latest Modified]', pkg);
logger.okay(force ? '[Forcing scan]' : '[Latest Modified]', pkg);
}

return list;
Expand Down
30 changes: 19 additions & 11 deletions packages/npm/lib/npm/scan.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { readFile } from 'node:fs/promises';
import { dirname } from 'node:path';

import { filter } from './filter.mjs';
import { getFileFromLastCommit, getLastCommitFiles } from './git.mjs';
import { getFileContentFromLastCommit, getLastCommitFiles } from './git.mjs';
import { logger } from './logger.mjs';
import { Exec } from './utils.mjs';

Expand Down Expand Up @@ -63,7 +63,7 @@ async function versionChanged(list) {
const io = [];

for (const item of list) {
const old = await getFileFromLastCommit(item.pkg)
const old = await getFileContentFromLastCommit(item.pkg)
.then((raw) => JSON.parse(raw))
.catch(() => false);

Expand All @@ -83,26 +83,34 @@ async function publishable(list) {
const io = [];

for (const item of list) {
const verions = await getVersions(item.name, item.publishConfig.registry);

if (verions && !verions.includes(item.version)) {
io.push(item);
logger.okay('[Not publish yet]', item.name);
if (item.publishConfig.registry.includes('registry.npmjs.org')) {
const versions = await getVersions(
item.name,
item.publishConfig.registry,
);

if (versions && !versions.includes(item.version)) {
io.push(item);
logger.okay('[Not publish yet]', item.name);
} else {
logger.info('[Published, skip]', item.name);
}
} else {
logger.info('[Published, skip]', item.name);
io.push(item);
logger.okay('[May publishable]', item.name);
}
}

return io;
}

export async function scan() {
export async function scan({ force }) {
logger.task('Scanning all package.json...');

try {
const list1 = await getLastCommitFiles();
const list1 = await getLastCommitFiles({ force });
const list2 = await publishReady(list1);
const list3 = await versionChanged(list2);
const list3 = force ? list2 : await versionChanged(list2);
const list4 = await publishable(list3);
logger.info(
list4.length > 0 ? list4.length : 'No',
Expand Down
2 changes: 1 addition & 1 deletion packages/npm/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@bring-it/npm",
"version": "0.1.6",
"version": "0.2.9",
"description": "Publish npm packages when needed",
"license": "MIT",
"author": {
Expand Down
2 changes: 1 addition & 1 deletion packages/sample/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"devDependencies": {
"@bring-it/utils": "*",
"cheetor": "^0.13.0",
"globby": "^13.2.0"
"globby": "^13.2.1"
},
"peerDependencies": {
"playwright-core": "^1.33.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/sftp/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"devDependencies": {
"@bring-it/utils": "*",
"cheetor": "^0.13.0",
"globby": "^13.2.0",
"globby": "^13.2.1",
"lodash": "^4.17.21",
"node-ssh": "^13.1.0",
"p-all": "^5.0.0",
Expand Down

0 comments on commit 9d8b88d

Please sign in to comment.