diff options
| author | Teddy Wing | 2017-11-12 15:06:06 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2017-11-12 15:06:06 +0100 | 
| commit | f5740b97cecd2a2984e274fb5fbd141675e3be24 (patch) | |
| tree | 734914d395a8e29e93ec5809dea5b9db203aa1a1 | |
| parent | bfa9e4eb2ea29622c98f1d2a70bbcd993ab69997 (diff) | |
| download | kipper-f5740b97cecd2a2984e274fb5fbd141675e3be24.tar.bz2 | |
main(): Add command line options
Add options for:
* Jenkins URL
* Jenkins username
* Jenkins token
* GitHub token
* Port
Add a help option for usage information. All options except "port" are
required. Didn't use `reqopt` because that panics when you try to ask
for help without the required options. Now, when trying to run without a
required option, the usage help is printed. Maybe we should have an
error message instead.
| -rw-r--r-- | src/main.rs | 73 | 
1 files changed, 73 insertions, 0 deletions
| diff --git a/src/main.rs b/src/main.rs index 5882909..e9b7cc7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,19 +1,92 @@ +extern crate getopts;  #[macro_use]  extern crate rouille;  extern crate kipper; +use std::env;  use std::io::Read; +use getopts::Options; +  use kipper::jenkins;  use kipper::pull_request::CommitRef; +const DEFAULT_PORT: u16 = 8000; + +fn print_usage(opts: Options) { +    let brief = "Usage: kipper --jenkins-url 'https://jenkins.example.com' --jenkins-user-id username --jenkins-token a72a57d448694703b2c3fd19e666ecc5 --github-token 1dc41fad0516460b870014b25b11847d"; +    print!("{}", opts.usage(&brief)); +} +  fn internal_server_error() -> rouille::Response {      rouille::Response::text("500 Internal Server Error")          .with_status_code(500)  }  fn main() { +    let args: Vec<String> = env::args().collect(); + +    let mut opts = Options::new(); +    opts.optopt("", "jenkins-url", "Jenkins URL (required)", "https://jenkins.example.com"); +    opts.optopt("", "jenkins-user-id", "Jenkins user ID (required)", "USER_ID"); +    opts.optopt("", "jenkins-token", "Jenkins API token (required)", "TOKEN"); +    opts.optopt( +        "", +        "github-token", +        "GitHub API token with \"repo:status\" permission (required)", +        "TOKEN" +    ); +    opts.optopt("p", "port", "set port number", "PORT"); +    opts.optflag("h", "help", "print this help menu"); + +    let opt_matches = match opts.parse(&args[1..]) { +        Ok(m) => m, +        Err(e) => panic!(e.to_string()), +    }; + +    if opt_matches.opt_present("h") { +        print_usage(opts); +        return; +    } + +    let jenkins_url = match opt_matches.opt_str("jenkins-url") { +        Some(url) => url, +        None => { +            print_usage(opts); +            return; +        }, +    }; + +    let jenkins_user_id = match opt_matches.opt_str("jenkins-user-id") { +        Some(user_id) => user_id, +        None => { +            print_usage(opts); +            return; +        }, +    }; + +    let jenkins_token = match opt_matches.opt_str("jenkins-token") { +        Some(token) => token, +        None => { +            print_usage(opts); +            return; +        }, +    }; + +    let github_token = match opt_matches.opt_str("github-token") { +        Some(token) => token, +        None => { +            print_usage(opts); +            return; +        }, +    }; + +    let port = match opt_matches.opt_str("p") { +        Some(p) => p.parse().expect("Unable to parse specified port"), +        None => DEFAULT_PORT, +    }; +      rouille::start_server("localhost:8000", move |request| {          router!(request,              (POST) (/github/pull_request_event) => { | 
