78 lines
2.8 KiB
YAML
78 lines
2.8 KiB
YAML
|
name: 'run-tests'
|
||
|
description: 'Runs go test and upload a step summary'
|
||
|
inputs:
|
||
|
filter:
|
||
|
description: 'The go test pattern for the tests to run'
|
||
|
required: false
|
||
|
default: ''
|
||
|
upload-logs-name:
|
||
|
description: 'Choose the name of the log artifact'
|
||
|
required: false
|
||
|
default: logs-${{ github.job }}-${{ strategy.job-index }}
|
||
|
upload-logs:
|
||
|
description: 'If true uploads logs of each tests as an artifact'
|
||
|
required: false
|
||
|
default: 'true'
|
||
|
runs:
|
||
|
using: composite
|
||
|
steps:
|
||
|
- uses: actions/github-script@v6
|
||
|
with:
|
||
|
github-token: none # No reason to grant access to the GITHUB_TOKEN
|
||
|
script: |
|
||
|
let myOutput = '';
|
||
|
var fs = require('fs');
|
||
|
var uploadLogs = process.env.UPLOAD_LOGS === 'true';
|
||
|
if(uploadLogs) {
|
||
|
await io.mkdirP('logs');
|
||
|
}
|
||
|
var filename = null;
|
||
|
const options = {};
|
||
|
options.ignoreReturnCode = true;
|
||
|
options.env = Object.assign({}, process.env);
|
||
|
delete options.env.ACTIONS_RUNTIME_URL;
|
||
|
delete options.env.ACTIONS_RUNTIME_TOKEN;
|
||
|
delete options.env.ACTIONS_CACHE_URL;
|
||
|
options.listeners = {
|
||
|
stdout: (data) => {
|
||
|
for(line of data.toString().split('\n')) {
|
||
|
if(/^\s*(===\s[^\s]+\s|---\s[^\s]+:\s)/.test(line)) {
|
||
|
if(uploadLogs) {
|
||
|
var runprefix = "=== RUN ";
|
||
|
if(line.startsWith(runprefix)) {
|
||
|
filename = "logs/" + line.substring(runprefix.length).replace(/[^A-Za-z0-9]/g, '-') + ".txt";
|
||
|
fs.writeFileSync(filename, line + "\n");
|
||
|
} else if(filename) {
|
||
|
fs.appendFileSync(filename, line + "\n");
|
||
|
filename = null;
|
||
|
}
|
||
|
}
|
||
|
myOutput += line + "\n";
|
||
|
} else if(filename) {
|
||
|
fs.appendFileSync(filename, line + "\n");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
var args = ['test', '-v', '-cover', '-coverprofile=coverage.txt', '-covermode=atomic', '-timeout', '15m'];
|
||
|
var filter = process.env.FILTER;
|
||
|
if(filter) {
|
||
|
args.push('-run');
|
||
|
args.push(filter);
|
||
|
}
|
||
|
args.push('./...');
|
||
|
var exitcode = await exec.exec('go', args, options);
|
||
|
if(process.env.GITHUB_STEP_SUMMARY) {
|
||
|
core.summary.addCodeBlock(myOutput);
|
||
|
await core.summary.write();
|
||
|
}
|
||
|
process.exit(exitcode);
|
||
|
env:
|
||
|
FILTER: ${{ inputs.filter }}
|
||
|
UPLOAD_LOGS: ${{ inputs.upload-logs }}
|
||
|
- uses: actions/upload-artifact@v3
|
||
|
if: always() && inputs.upload-logs == 'true' && !env.ACT
|
||
|
with:
|
||
|
name: ${{ inputs.upload-logs-name }}
|
||
|
path: logs
|