Skip to content

Commit

Permalink
Minor housekeeping
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Jan 17, 2025
1 parent c510a35 commit 4011b23
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 25 deletions.
3 changes: 2 additions & 1 deletion packages/knip/src/WorkspaceWorker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,9 @@ export class WorkspaceWorker {
if (hasResolveConfig) {
const inputs = (await plugin.resolveConfig?.(config, opts)) ?? [];
for (const input of inputs) {
if (isConfigPattern(input))
if (isConfigPattern(input)) {
handleConfigInput(input.pluginName, { ...input, containingFilePath: configFilePath });
}
addInput(input, configFilePath);
}
data.resolveConfig = inputs;
Expand Down
36 changes: 12 additions & 24 deletions packages/knip/src/plugins/github-actions/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import type { IsPluginEnabled, Plugin, ResolveConfig } from '../../types/config.js';
import type { IsPluginEnabled, Plugin, PluginOptions, ResolveConfig } from '../../types/config.js';
import { _firstGlob } from '../../util/glob.js';
import { type Input, isDeferResolveEntry, toEntry } from '../../util/input.js';
import { findByKeyDeep } from '../../util/object.js';
import { join, relative } from '../../util/path.js';
import type { Job, Runs } from './types.js';

// https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

Expand All @@ -19,20 +20,13 @@ const config = ['.github/workflows/*.{yml,yaml}', '.github/**/action.{yml,yaml}'

const isString = (value: unknown): value is string => typeof value === 'string';

type Step = {
run?: string;
uses?: string;
with?: {
repository: string;
path: string;
};
'working-directory'?: string;
};

type Steps = Step[];

type Job = {
steps: Steps;
const getActionDependencies = (config: any, options: PluginOptions) => {
const { configFileDir, configFileName } = options;
const isActionManifest = configFileName === 'action.yml' || configFileName === 'action.yaml';
if (!(isActionManifest && config?.runs?.using?.startsWith('node'))) return [];
const runs: Runs = config.runs;
const scripts = [runs.pre, runs.main, runs.post].filter(isString);
return scripts.map(script => join(configFileDir, script));
};

const resolveConfig: ResolveConfig = async (config, options) => {
Expand All @@ -53,23 +47,17 @@ const resolveConfig: ResolveConfig = async (config, options) => {
const dir = join(rootCwd, path && workingDir ? relative(workingDir, path) : workingDir ? workingDir : '.');
if (step.run) {
for (const input of getInputsFromScripts([step.run], { knownBinsOnly: true })) {
if (isDeferResolveEntry(input) && path && !workingDir)
if (isDeferResolveEntry(input) && path && !workingDir) {
input.specifier = relative(join(dir, path), join(rootCwd, input.specifier));
}
if (isProduction) Object.assign(input, { optional: true });
inputs.add({ ...input, dir });
}
}
}
}

const getActionDependencies = () => {
const isActionManifest = configFileName === 'action.yml' || configFileName === 'action.yaml';
if (!(isActionManifest && config?.runs?.using?.startsWith('node'))) return [];
const scripts = [config.runs.pre, config.runs.main, config.runs.post].filter(isString);
return scripts.map(script => join(configFileDir, script));
};

return [...getActionDependencies().map(toEntry), ...inputs];
return [...inputs, ...getActionDependencies(config, options).map(toEntry)];
};

export default {
Expand Down
22 changes: 22 additions & 0 deletions packages/knip/src/plugins/github-actions/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
type Step = {
run?: string;
uses?: string;
with?: {
repository: string;
path: string;
};
'working-directory'?: string;
};

type Steps = Step[];

export type Job = {
steps: Steps;
};

export type Runs = {
using: string;
main?: string;
pre?: string;
post?: string;
};

0 comments on commit 4011b23

Please sign in to comment.