Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b67cd9fb3 | ||
|
|
5938cacd96 | ||
|
|
389f0126c9 | ||
|
|
bbe92b8e4f | ||
|
|
6d3cafd749 | ||
|
|
9a33ec6b8a | ||
|
|
47a6b397d9 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
node_modules/
|
||||
*/gcc_matcher.json
|
||||
13
README.md
13
README.md
@@ -2,11 +2,18 @@
|
||||
|
||||
Creates annotations for warnings and errors in gcc builds.
|
||||
|
||||
## Inputs
|
||||
|
||||
## Usage
|
||||
### root
|
||||
|
||||
Just add a single line before running the build step.
|
||||
**Optional** Base directory for build. For builds done in a subdirectory, this should match that directory, otherwise the pattern match will not be able to point to the correct file.
|
||||
|
||||
## Example usage
|
||||
|
||||
Just add this line anywhere before running the build step.
|
||||
|
||||
```yaml
|
||||
- uses: olemorud/gcc-problem-matcher@master
|
||||
```
|
||||
with:
|
||||
root: /workspace/build
|
||||
```
|
||||
@@ -16,4 +16,4 @@ inputs:
|
||||
|
||||
runs:
|
||||
using: 'node16'
|
||||
main: 'src/index.js'
|
||||
main: 'dist/index.js'
|
||||
17
dist/gcc_matcher.jsontemplate
vendored
Normal file
17
dist/gcc_matcher.jsontemplate
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"problemMatcher": [
|
||||
{
|
||||
"owner": "gcc-problem-matcher",
|
||||
"pattern": [
|
||||
{
|
||||
"regexp": "^${{ BASE }}\/?(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"column": 3,
|
||||
"severity": 4,
|
||||
"message": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
2880
dist/index.js
vendored
Normal file
2880
dist/index.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
77
package-lock.json
generated
Normal file
77
package-lock.json
generated
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"name": "gcc-problem-matcher",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "gcc-problem-matcher",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/core": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
|
||||
"integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
|
||||
"dependencies": {
|
||||
"@actions/http-client": "^2.0.1",
|
||||
"uuid": "^8.3.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@actions/http-client": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz",
|
||||
"integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==",
|
||||
"dependencies": {
|
||||
"tunnel": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
||||
"engines": {
|
||||
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
||||
}
|
||||
},
|
||||
"node_modules/uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||
"bin": {
|
||||
"uuid": "dist/bin/uuid"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@actions/core": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.0.tgz",
|
||||
"integrity": "sha512-2aZDDa3zrrZbP5ZYg159sNoLRb61nQ7awl5pSvIq5Qpj81vwDzdMRKzkWJGJuwVvWpvZKx7vspJALyvaaIQyug==",
|
||||
"requires": {
|
||||
"@actions/http-client": "^2.0.1",
|
||||
"uuid": "^8.3.2"
|
||||
}
|
||||
},
|
||||
"@actions/http-client": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.1.0.tgz",
|
||||
"integrity": "sha512-BonhODnXr3amchh4qkmjPMUO8mFi/zLaaCeCAJZqch8iQqyDnVIkySjB38VHAC8IJ+bnlgfOqlhpyCUZHlQsqw==",
|
||||
"requires": {
|
||||
"tunnel": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"tunnel": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
||||
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
}
|
||||
26
package.json
Normal file
26
package.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"name": "gcc-problem-matcher",
|
||||
"version": "1.0.0",
|
||||
"description": "Creates annotations for warnings and errors in gcc builds.",
|
||||
"main": "index.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "node --test",
|
||||
"build": "ncc build src/index.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/olemorud/gcc-problem-matcher.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"bugs": {
|
||||
"url": "https://github.com/olemorud/gcc-problem-matcher/issues"
|
||||
},
|
||||
"homepage": "https://github.com/olemorud/gcc-problem-matcher#readme",
|
||||
"dependencies": {
|
||||
"@actions/core": "^1.10.0"
|
||||
}
|
||||
}
|
||||
43
src/index.js
43
src/index.js
@@ -1,33 +1,44 @@
|
||||
const path = require('path');
|
||||
const fs = require('node:fs');
|
||||
//const core = require('@actions/core');
|
||||
const core = require('@actions/core');
|
||||
|
||||
// C:\Users\ => C\:\\Users\\
|
||||
// escapeRegExp :: string => string
|
||||
// escape all characters with special meanings in regexp
|
||||
const escapeRegExp = (s) =>
|
||||
s.replace(/[:.*+?^${}()|\/[\]\\]/g, "\\$&");
|
||||
|
||||
|
||||
// ${{ key }}, ${{var}}, ${{ aggqq43g3qg4 }}
|
||||
// variable :: string => RegExp
|
||||
// create regex to match ${{ key }}
|
||||
const variable = (key) =>
|
||||
new RegExp("\\${{\\s*?" + key + "\\s*?}}", "g");
|
||||
|
||||
|
||||
// default value set in /action.yml
|
||||
// const root = core.getInput('root', { required: false });
|
||||
root = '/tmp/workspace';
|
||||
|
||||
// templatePath :: string
|
||||
const templatePath = path.join(__dirname, "gcc_matcher.jsontemplate");
|
||||
|
||||
const parsed =
|
||||
fs.readFileSync(templatePath, "ascii")
|
||||
.replace(variable("BASE"), escapeRegExp(root));
|
||||
|
||||
// matcherPath :: string
|
||||
const matcherPath = path.join(__dirname, "gcc_matcher.json");
|
||||
|
||||
fs.writeFileSync(matcherPath, parsed);
|
||||
// parse :: IO => IO => Error | null
|
||||
const parse = (templatePath) => (matcherPath) => {
|
||||
fs.readFile(templatePath, 'utf-8', (err, content) => {
|
||||
if (err) throw err;
|
||||
|
||||
console.log('::add-matcher::' + matcherPath);
|
||||
const root = core.getInput('root', { required: false });
|
||||
|
||||
/* for testing */
|
||||
const parsed = content.replace(variable("BASE"), escapeRegExp(root));
|
||||
|
||||
fs.writeFile(matcherPath, parsed, (err) => {
|
||||
if (err) throw err;
|
||||
|
||||
console.log('::add-matcher::' + matcherPath);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// main:
|
||||
parse(templatePath)(matcherPath);
|
||||
|
||||
|
||||
// for testing
|
||||
exports.escapeRegExp = escapeRegExp
|
||||
exports.variable = variable;
|
||||
Reference in New Issue
Block a user