Skip to content

Commit

Permalink
add excludes option
Browse files Browse the repository at this point in the history
  • Loading branch information
haarg committed Sep 14, 2024
1 parent cd9dff1 commit 30801c1
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 3 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ List of files to search for prerequisites. Supported formats are:

Defaults to `MYMETA.json MYMETA.yml META.json META.yml Makefile cpanfile`.

### `excludes`

A list of regular expressions of prerequisites to exclude. One pattern per line.

## Outputs

### `perl`
Expand Down
3 changes: 3 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ inputs:
description: 'Source files to check for prerequisites'
required: false
default: 'MYMETA.json MYMETA.yml META.json META.yml Makefile cpanfile'
exclude:
description: 'Patterns to exclude from returned prerequisites'
required: false

outputs:
perl:
Expand Down
17 changes: 14 additions & 3 deletions src/get-prereqs.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,19 @@ import {
} from './parser/meta.mjs';
import { mergeVersions } from './cpan-versions.mjs';

const filterPrereqs = ({ prereqs, phases, relationships, features }) => {
const filterPrereqs = ({
prereqs,
phases,
relationships,
features,
excludes,
}) => {
return prereqs.filter(
prereq =>
phases.has(prereq.phase)
&& relationships.has(prereq.relationship)
&& (!prereq.feature || features.includes(prereq.feature)),
&& (!prereq.feature || features.includes(prereq.feature))
&& !excludes.filter(ex => ex.exec(prereq.prereq)).length,
);
};

Expand Down Expand Up @@ -53,6 +60,7 @@ export const getPrereqs = async ({
relationships = ['requires'],
features = [],
sources,
excludes = [],
}) => {
for (const source of sources) {
const parser = parserFor(source);
Expand All @@ -72,11 +80,14 @@ export const getPrereqs = async ({

const content = fh.readFile({ encoding: 'utf8' });

const allPrereqs = await parser(content);

const filteredPrereqs = filterPrereqs({
prereqs: await parser(content),
prereqs: allPrereqs,
phases: new Set(phases),
relationships: new Set(relationships),
features: new Set(features),
excludes,
}).toSorted(sortByPrereq);

const prereqs = {};
Expand Down
3 changes: 3 additions & 0 deletions src/main.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,20 @@ const run = async () => {
const relationshipsInput = core.getInput('relationships');
const featuresInput = core.getInput('features');
const sourcesInput = core.getInput('sources');
const excludeInput = core.getMultilineInput('exclude');

const phases = new Set(phasesInput.split(/\s+/));
const relationships = new Set(relationshipsInput.split(/\s+/));
const features = new Set(featuresInput.split(/\s+/));
const sources = sourcesInput.split(/\s+/);
const excludes = excludeInput.filter(p => p.length).map(p => new RegExp(p));

const { perl, ...prereqs } = await getPrereqs({
phases,
relationships,
features,
sources,
excludes,
});

if (perl) {
Expand Down
1 change: 1 addition & 0 deletions test/action.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ describe('GitHub action', function () {
phases: 'test',
relationships: 'recommends',
features: '',
excludes: '',
});
expect(outputs).to.be.deep.equal({
'prereqs': 'CPAN::Meta~2.120900\n',
Expand Down
22 changes: 22 additions & 0 deletions test/get-prereqs.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,26 @@ describe('getPrereqs', function () {
'inc::bootstrap': '>=0',
});
});

it('excludes applies correctly', async function () {
const filename = joinPath(__dirname, 'corpus', 'dist.ini');
const prereqs = await getPrereqs({
sources: [filename],
phases: ['author'],
excludes: [/^inc::/],
});
expect(prereqs).to.be.deep.equal({
'Dist::Zilla': '>=5.0',
'Dist::Zilla::Plugin::GatherFile': '>=0',
'Dist::Zilla::Plugin::Git::GatherDir': '>=5',
'Dist::Zilla::Plugin::PodWeaver': '>=0',
'Dist::Zilla::PluginBundle::Basic': '>=0,>=6',
'Dist::Zilla::PluginBundle::ConfigSlicer': '>=0',
'Dist::Zilla::PluginBundle::Filter': '>=2',
'Dist::Zilla::PluginBundle::Git::VersionManager': '>=0',
'Pod::Weaver::Plugin::StopWords': '>=0',
'Pod::Weaver::Section::Contributors': '>=0',
'Software::License::Perl_5': '>=0',
});
});
});

0 comments on commit 30801c1

Please sign in to comment.