Skip to content

Commit f83ed9d

Browse files
authored
Merge pull request agutoli#131 from agutoli/package-patterns-ignore-exclude
implementing package exclude/ignore files for layers packages.
2 parents db9ff9e + b3da2e0 commit f83ed9d

File tree

1 file changed

+45
-2
lines changed

1 file changed

+45
-2
lines changed

src/package/Dependencies.js

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ const copyFile = require('fs-copy-file'); // node v6.10.3 support
99

1010
const AbstractService = require('../AbstractService');
1111

12-
function resolveFile(from) {
12+
function resolveFile(from, opts = {}) {
1313
return new Promise((resolve, reject) => {
14-
glob(from, {}, (err, files) => {
14+
glob(from, opts, (err, files) => {
1515
if (err) return reject();
1616
return resolve(files);
1717
});
@@ -31,6 +31,46 @@ class Dependencies extends AbstractService {
3131
return path.resolve(rooPath);
3232
}
3333

34+
/**
35+
* Implementing package pattern ignore
36+
* https://github.com/agutoli/serverless-layers/issues/118
37+
*/
38+
async excludePatternFiles() {
39+
let filesToIgnore = [];
40+
let filesToExclude = [];
41+
42+
/**
43+
* Patterns allows you to define globs that will be excluded / included from the
44+
* resulting artifact. If you wish to exclude files you can use a glob pattern prefixed
45+
* with ! such as !exclude-me/**. Serverless will run the glob patterns in order so
46+
* you can always re-include previously excluded files and directories.
47+
*
48+
* Reference: https://www.serverless.com/framework/docs/providers/aws/guide/packaging
49+
*/
50+
for (let pattern of this.plugin.service.package.patterns) {
51+
if (pattern.startsWith('!')) {
52+
const resolvedFiles = await resolveFile(pattern.substr(1), {
53+
cwd: this.layersPackageDir
54+
});
55+
filesToIgnore = filesToIgnore.concat(resolvedFiles);
56+
} else {
57+
// change directory
58+
const resolvedFiles = await resolveFile(pattern, {
59+
cwd: this.layersPackageDir
60+
});
61+
filesToExclude = filesToExclude.concat(resolvedFiles);
62+
}
63+
}
64+
65+
filesToExclude.forEach((filename) => {
66+
// check if folder or files are being ignored, and shouldn't be removed.
67+
const shouldBeIgnored = filesToIgnore.filter(x => x.startsWith(filename)).length > 0;
68+
if (!shouldBeIgnored) {
69+
fs.rmSync(path.join(this.layersPackageDir, filename), {force: true, recursive: true});
70+
}
71+
});
72+
}
73+
3474
async run(cmd) {
3575
const output = execSync(cmd, {
3676
cwd: this.layersPackageDir,
@@ -104,6 +144,9 @@ class Dependencies extends AbstractService {
104144
console.log(e);
105145
}
106146
}
147+
148+
// cleanup files
149+
await this.excludePatternFiles();
107150
}
108151
}
109152

0 commit comments

Comments
 (0)