1
1
mirror of https://github.com/theoludwig/programming-challenges.git synced 2024-12-08 00:45:29 +01:00

fix(cli): add --base option to run test command

This commit is contained in:
Divlo 2021-06-30 15:23:58 +02:00
parent ede3e7526b
commit 996dcd89c3
No known key found for this signature in database
GPG Key ID: 185ED2F15F104E52
3 changed files with 25 additions and 8 deletions

View File

@ -109,5 +109,12 @@ jobs:
- name: 'Install programming-challenges'
run: 'npm install --global'
- uses: 'nrwl/last-successful-commit-action@v1'
id: 'last_successful_commit'
with:
branch: 'master'
workflow_id: 'ci.yml'
github_token: ${{ secrets.GITHUB_TOKEN }}
- name: 'Test'
run: 'programming-challenges run test --affected --ci'
run: 'programming-challenges run test --affected --ci --base=${{ steps.last_successful_commit.outputs.commit_hash }}'

View File

@ -39,12 +39,17 @@ export class RunTestCommand extends Command {
description: 'Run the tests for the Continuous Integration (CI).'
})
public base = Option.String('--base', {
description: 'Base of the current branch (usually master)'
})
async execute (): Promise<number> {
console.log()
try {
if (this.affected) {
const gitAffected = new GitAffected({
isContinuousIntegration: this.isContinuousIntegration
isContinuousIntegration: this.isContinuousIntegration,
base: this.base
})
const solutions = await gitAffected.getAffectedSolutions()
for (const solution of solutions) {

View File

@ -9,13 +9,16 @@ const solutionsRegex = new RegExp(
export interface GitAffectedOptions {
isContinuousIntegration: boolean
base?: string
}
export class GitAffected implements GitAffectedOptions {
public isContinuousIntegration: boolean
public base?: string
constructor (options: GitAffectedOptions) {
this.isContinuousIntegration = options.isContinuousIntegration
this.base = options.base
}
public parseGitOutput (output: string): string[] {
@ -57,12 +60,14 @@ export class GitAffected implements GitAffectedOptions {
}
public async getAffectedSolutions (): Promise<Solution[]> {
const files = Array.from(
new Set([
...(await this.getUnpushedFiles()),
...(await this.getUncommittedFiles())
])
)
let files = [
...(await this.getUnpushedFiles()),
...(await this.getUncommittedFiles())
]
if (this.base != null) {
files.push(...(await this.getFilesUsingBaseAndHead(this.base, '.')))
}
files = Array.from(new Set(files))
const affectedSolutionsPaths = files.filter((filePath) => {
return solutionsRegex.test(filePath)
})