diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..6a7295b --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,54 @@ +pipeline { + agent any + options { + buildDiscarder(logRotator(numToKeepStr: "100")) + skipDefaultCheckout(true) + } + triggers { + pollSCM("*/10 * * * *") + } + environment { + SONAR_SCANNER_VERSION="4.7.0.2747" + SONAR_SCANNER_HOME="$HOME/.sonar/sonar-scanner-$SONAR_SCANNER_VERSION-linux" + PATH="$SONAR_SCANNER_HOME/bin:$PATH" + SONAR_SCANNER_OPTS="-server" + } + stages { + stage('Checkout') { + steps{ + //cleanWs() + checkout scm + } + } + /*stage('Clean') { + steps { + withEnv(["PATH+RUST=$HOME/.cargo/bin"]) { // Cargo needs to be installed for the jenkins user + sh 'cargo clean' + } + } + }*/ + stage('Build') { + steps { + withSonarQubeEnv(installationName: 'SQ Bib Watcher', envOnly: true) { + withEnv(["PATH+RUST=$HOME/.cargo/bin"]) { + sh 'cargo build --release' + } + } + } + } + // For this to work, edit sonar-scanner script to set use_embedded_jre=false + stage('SonarQube Analysis') { + steps { + withSonarQubeEnv(installationName: 'SQ Bib Watcher', envOnly: true) { + withEnv(["PATH+RUST=$HOME/.cargo/bin"]) { + sh """ + SONAR_TOKEN="$SONAR_AUTH_TOKEN" + cargo clippy --message-format=json &> clippy-output.json + sonar-scanner -Dsonar.projectKey=bib-watcher -Dsonar.sources=. -Dsonar.host.url=http://grover.local:9000 + """ + } + } + } + } + } +} \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..b3b5ea8 --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1 @@ +community.rust.clippy.reportPaths=clippy-output.json \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 501bf93..8a2bf61 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,6 @@ use config::Config; use reqwest::header; -use rss::{Channel, ChannelBuilder, ItemBuilder}; +use rss::{Channel, ChannelBuilder, GuidBuilder, ItemBuilder}; use scraper::{Html, Selector}; use std::collections::HashMap; use std::{error::Error, fs::File, io::BufReader}; @@ -84,12 +84,17 @@ fn search(url: &str, title: &str) -> Result<(), Box> { .build()), }?; let mut items = channel.clone().into_items(); + let guid = GuidBuilder::default() + .value(title.to_string() + &Utc::now().to_rfc2822()) + .permalink(false) + .build(); items.push( ItemBuilder::default() .title(Some(title.to_string())) .pub_date(Some(Utc::now().to_rfc2822())) .link(Some(url.to_string())) .description(Some(status)) + .guid(Some(guid)) .build(), ); channel.set_items(items);