diff --git a/src/index.js b/src/index.js index 2817a4a..8f3ee2c 100644 --- a/src/index.js +++ b/src/index.js @@ -119,7 +119,27 @@ function start (id) { const query = { style: req.query.style } travis.getLatestBranchBuild(branch).then((build) => { const filters = { - env: req.query.env + compiler: req.query.compiler, + d: req.query.d, + dart: req.query.dart, + dotnet: req.query.dotnet, + elixir: req.query.elixir, + env: req.query.env, + gemfile: req.query.gemfile, + go: req.query.go, + jdk: req.query.jdk, + mono: req.query.mono, + node_js: req.query.node_js, + os: req.query.os, + osx_image: req.query.osx_image, + otp_release: req.query.otp_release, + php: req.query.php, + python: req.query.python, + rust: req.query.rust, + rvm: req.query.rvm, + scala: req.query.scala, + xcode_scheme: req.query.xcode_scheme, + xcode_sdk: req.query.xcode_sdk } const jobs = travis.filterJobs(build.jobs, filters) const status = travis.aggregateStatus(jobs) diff --git a/src/travis.js b/src/travis.js index dcb7d15..9a9a2be 100644 --- a/src/travis.js +++ b/src/travis.js @@ -86,15 +86,41 @@ export default class TravisClient { }) } + matchesStringFilter (actual, expected) { + return !expected || (actual == expected) + } + + matchesRegexFilter (actual, expectedRegex) { + return !expectedRegex || expectedRegex.test(actual) + } + filterJobs (jobs, filters = {}) { - const { env } = filters - const envRegex = env && new RegExp(`(^| )${env}( |$)`) + const envRegex = filters.env && new RegExp(`(^| )${filters.env}( |$)`) return jobs.filter((job) => { - const jobEnv = job.config.env || '' - if (envRegex && (!jobEnv || !envRegex.test(jobEnv))) { - return false - } - return true + return ( + matchesStringFilter(job.config.compiler, filters.compiler) && + matchesStringFilter(job.config.d, filters.d) && + matchesStringFilter(job.config.dart, filters.dart) && + matchesStringFilter(job.config.dotnet, filters.dotnet) && + matchesStringFilter(job.config.elixir, filters.elixir) && + matchesRegexFilter(job.config.env, envRegex) && + matchesStringFilter(job.config.gemfile, filters.gemfile) && + matchesStringFilter(job.config.go, filters.go) && + matchesStringFilter(job.config.jdk, filters.jdk) && + matchesStringFilter(job.config.mono, filters.mono) && + matchesStringFilter(job.config.node_js, filters.node_js) && + matchesStringFilter(job.config.os, filters.os) && + matchesStringFilter(job.config.osx_image, filters.osx_image) && + matchesStringFilter(job.config.otp_release, filters.otp_release) && + matchesStringFilter(job.config.php, filters.php) && + matchesStringFilter(job.config.python, filters.python) && + matchesStringFilter(job.config.rust, filters.rust) && + matchesStringFilter(job.config.rvm, filters.rvm) && + matchesStringFilter(job.config.scala, filters.scala) && + matchesStringFilter(job.config.xcode_scheme, filters.xcode_scheme) && + matchesStringFilter(job.config.xcode_sdk, filters.xcode_sdk) && + true + ) }) }