7 Commits

Author SHA1 Message Date
olemorud
8b67cd9fb3 Update action.yml to use dist/ 2023-03-14 15:21:46 +01:00
olemorud
5938cacd96 Add npm build command 2023-03-14 15:21:03 +01:00
olemorud
389f0126c9 update index.js 2023-03-14 15:20:54 +01:00
olemorud
bbe92b8e4f ncc build 2023-03-14 15:00:33 +01:00
olemorud
6d3cafd749 .gitignore: add */gcc_matcher.json 2023-03-14 15:00:33 +01:00
olemorud
9a33ec6b8a Update README 2023-03-14 14:54:46 +01:00
olemorud
47a6b397d9 npm init 2023-03-14 14:54:46 +01:00
10 changed files with 44 additions and 133 deletions

View File

@@ -1,33 +0,0 @@
name: CI
on: [push, pull_request, workflow_dispatch]
jobs:
run-tests:
if: github.repository_owner == 'olemorud'
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: npm install
run: npm ci
- name: Run unit tests
run: npm run test
- name: Apply problem matcher
uses: ./
with:
build-directory: build/
- name: Test problem matcher
run: |
ls
cat dist/gcc_matcher.json
cp -r test build
gcc -Wall -Wextra -O0 build/generate_warnings.c

4
.gitignore vendored
View File

@@ -1,4 +1,2 @@
node_modules/
*/gcc_matcher.json
*/a.out
.vscode/
*/gcc_matcher.json

View File

@@ -1,42 +1,19 @@
# GCC problem matcher (no longer maintained)
> **Warning**
> This repository is no longer maintained, the new upstream is: https://github.com/root-project/gcc-problem-matcher-improved
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Folemorud%2Fgcc-problem-matcher.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Folemorud%2Fgcc-problem-matcher?ref=badge_shield)
# GCC problem matcher
Creates annotations for warnings and errors in gcc builds.
![image](https://user-images.githubusercontent.com/82065181/225907856-336fa631-6520-44ce-bdf5-cf5780e45e40.png)
## Inputs
### build-directory
### root
**Optional** Directory the build is running in. Matched errors will not be able to point to the correct file or create warnings in the `Files changed` overview unless this is correct.
**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
Create annotations for builds done in the default directory. Add this anywhere before starting the build.
```yaml
- uses: olemorud/gcc-problem-matcher@v1.0
- name: Build
run: |
...
```
Create annotations for builds done in directory `/workspace/build/`
Just add this line anywhere before running the build step.
```yaml
- uses: olemorud/gcc-problem-matcher@master
with:
build-directory: /workspace/build/
- name: Build
run: |
...
```
root: /workspace/build
```

View File

@@ -1,6 +1,6 @@
name: GCC Problem Matcher Improved (deprecated)
name: GCC Problem Matcher
description: new upstream: https://github.com/root-project/gcc-problem-matcher-improved
description: Get annotations for warnings and errors on builds using gcc
author: Ole Morud
@@ -9,10 +9,11 @@ branding:
color: yellow
inputs:
build-directory:
root:
description: 'base directory for build, e.g. /workdir/build'
required: false
default: ''
runs:
using: 'node16'
main: 'dist/index.js'
main: 'dist/index.js'

View File

@@ -4,7 +4,7 @@
"owner": "gcc-problem-matcher",
"pattern": [
{
"regexp": "^${{ BASE }}\\/?(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"regexp": "^${{ BASE }}\/?(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,

43
dist/index.js vendored
View File

@@ -2845,45 +2845,32 @@ const path = __nccwpck_require__(17);
const fs = __nccwpck_require__(561);
const core = __nccwpck_require__(127);
// escapeRegExp :: string => string
// escape all characters with special meanings in regexp
// C:\Users\ => C\:\\Users\\
const escapeRegExp = (s) =>
s.replace(/[/\-^$*+?.()|[\]{}]/g, "\\\\$&");
s.replace(/[:.*+?^${}()|\/[\]\\]/g, "\\$&");
// variable :: string => RegExp
// create regex to match ${{ key }}
// ${{ key }}, ${{var}}, ${{ aggqq43g3qg4 }}
const variable = (key) =>
new RegExp("\\${{\\s*?" + key + "\\s*?}}", "g");
// templatePath :: string
// default value set in /action.yml
const root = core.getInput('root', { required: false });
const templatePath = __nccwpck_require__.ab + "gcc_matcher.jsontemplate";
// matcherPath :: string
const outputPath = __nccwpck_require__.ab + "gcc_matcher.json";
const parsed =
fs.readFileSync(__nccwpck_require__.ab + "gcc_matcher.jsontemplate", "ascii")
.replace(variable("BASE"), escapeRegExp(root));
// rootdir :: string
const rootdir = core.getInput('build-directory', {required: false});
const matcherPath = __nccwpck_require__.ab + "gcc_matcher.json";
// parse :: string => string => Error | null
const parse = (templatePath) => (matcherPath) => {
const content = fs.readFileSync(templatePath, 'utf-8');
fs.writeFileSync(__nccwpck_require__.ab + "gcc_matcher.json", parsed);
const parsed = content.replace(variable("BASE"), escapeRegExp(rootdir));
console.log('::add-matcher::' + matcherPath);
fs.writeFileSync(matcherPath, parsed);
console.log('::add-matcher::' + matcherPath);
}
// main:
try {
parse(__nccwpck_require__.ab + "gcc_matcher.jsontemplate")(__nccwpck_require__.ab + "gcc_matcher.json");
} catch (err) {
core.setFailed(`Action failed with error ${err}`)
}
// for testing
/* for testing */
exports.escapeRegExp = escapeRegExp
exports.variable = variable;
})();

View File

@@ -4,7 +4,7 @@
"owner": "gcc-problem-matcher",
"pattern": [
{
"regexp": "^${{ BASE }}\\/?(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"regexp": "^${{ BASE }}\/?(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,

View File

@@ -5,7 +5,7 @@ const core = require('@actions/core');
// escapeRegExp :: string => string
// escape all characters with special meanings in regexp
const escapeRegExp = (s) =>
s.replace(/[/\-^$*+?.()|[\]{}]/g, "\\\\$&");
s.replace(/[:.*+?^${}()|\/[\]\\]/g, "\\$&");
// variable :: string => RegExp
// create regex to match ${{ key }}
@@ -16,28 +16,27 @@ const variable = (key) =>
const templatePath = path.join(__dirname, "gcc_matcher.jsontemplate");
// matcherPath :: string
const outputPath = path.join(__dirname, "gcc_matcher.json");
const matcherPath = path.join(__dirname, "gcc_matcher.json");
// rootdir :: string
const rootdir = core.getInput('build-directory', {required: false});
// parse :: string => string => Error | null
// parse :: IO => IO => Error | null
const parse = (templatePath) => (matcherPath) => {
const content = fs.readFileSync(templatePath, 'utf-8');
fs.readFile(templatePath, 'utf-8', (err, content) => {
if (err) throw err;
const parsed = content.replace(variable("BASE"), escapeRegExp(rootdir));
const root = core.getInput('root', { required: false });
fs.writeFileSync(matcherPath, parsed);
const parsed = content.replace(variable("BASE"), escapeRegExp(root));
console.log('::add-matcher::' + matcherPath);
fs.writeFile(matcherPath, parsed, (err) => {
if (err) throw err;
console.log('::add-matcher::' + matcherPath);
});
});
}
// main:
try {
parse(templatePath)(outputPath);
} catch (err) {
core.setFailed(`Action failed with error ${err}`)
}
parse(templatePath)(matcherPath);
// for testing

View File

@@ -1,18 +0,0 @@
x;
bad_code(float n) {
int small[3];
char index = 10;
x = small[index];
return bad_code(x);
}
main() {
printf("%f %s", bad_code(1.0f));
}

View File

@@ -2,7 +2,7 @@ const assert = require('node:assert');
const test = require('node:test');
const _testing = require('../src/index');
test('regex escaping test', {skip: true}, () => {
test('regex escaping test', () => {
const escapeRegExp = _testing.escapeRegExp;
const st = [