ci: Add Jenkins configuration and related files
This commit is contained in:
parent
d6cc851ee6
commit
d3788a8683
|
@ -0,0 +1,21 @@
|
||||||
|
FROM rust:1.65.0-slim-bullseye
|
||||||
|
|
||||||
|
LABEL maintainer="augustinas@status.im"
|
||||||
|
LABEL source="https://github.com/logos-co/Overwatch"
|
||||||
|
LABEL description="Overwatch ci build image"
|
||||||
|
|
||||||
|
# Using backports for go 1.19
|
||||||
|
RUN echo 'deb http://deb.debian.org/debian bullseye-backports main' >> /etc/apt/sources.list
|
||||||
|
|
||||||
|
# Dependecies for publishing documentation and building waku-bindings.
|
||||||
|
RUN apt-get update && apt-get install -yq \
|
||||||
|
openssh-client git clang \
|
||||||
|
golang-src/bullseye-backports \
|
||||||
|
golang-doc/bullseye-backports \
|
||||||
|
golang/bullseye-backports
|
||||||
|
|
||||||
|
RUN rustup component add rustfmt clippy
|
||||||
|
|
||||||
|
# Jenkins user needs a specific UID/GID to work.
|
||||||
|
RUN groupadd -g 1001 jenkins \
|
||||||
|
&& useradd -u 1001 -g jenkins jenkins
|
|
@ -0,0 +1,46 @@
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
dockerfile {
|
||||||
|
label 'linux'
|
||||||
|
dir 'ci'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
GOPATH = '/tmp/go'
|
||||||
|
GOCACHE = '/tmp/'
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
buildDiscarder(logRotator(
|
||||||
|
numToKeepStr: '20',
|
||||||
|
daysToKeepStr: '30',
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Check') {
|
||||||
|
steps {
|
||||||
|
sh 'cargo check --all --all-features'
|
||||||
|
sh 'cargo fmt -- --check'
|
||||||
|
sh 'cargo clippy --all --all-features -- --deny warnings'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
steps {
|
||||||
|
sh 'cargo build --all --all-features'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Test') {
|
||||||
|
steps {
|
||||||
|
sh 'cargo test --all --all-features'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
cleanup { cleanWs() }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
library 'status-jenkins-lib@v1.6.0'
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent {
|
||||||
|
label 'macos && x86_64'
|
||||||
|
}
|
||||||
|
|
||||||
|
environment {
|
||||||
|
GOPATH = '/tmp/go'
|
||||||
|
GOCACHE = '/tmp/'
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
buildDiscarder(logRotator(
|
||||||
|
numToKeepStr: '20',
|
||||||
|
daysToKeepStr: '30',
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Check') {
|
||||||
|
steps { script {
|
||||||
|
nix.shell('cargo check --all --all-features')
|
||||||
|
nix.shell('cargo fmt -- --check')
|
||||||
|
nix.shell('cargo clippy --all --all-features -- --deny warnings')
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Build') {
|
||||||
|
steps { script {
|
||||||
|
nix.shell('cargo build --all --all-features')
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Test') {
|
||||||
|
steps { script {
|
||||||
|
nix.shell('cargo test --all --all-features')
|
||||||
|
} }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
post {
|
||||||
|
cleanup { cleanWs() }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
# Building `Overwatch` with Jenkins
|
||||||
|
|
||||||
|
This is a short introduction for developers on how to use `ci` folder to update build dependencies or to modify the build process.
|
||||||
|
|
||||||
|
## ci/Dockerfile (Docs, linux target)
|
||||||
|
|
||||||
|
Dockerfile is used when `Overwatch` documentation is being built and to lint/test/build for linux target. Official rust image is used with a predefined version. In addition, golang and cargo components are downloaded when the image is being built.
|
||||||
|
In general, this file should be used just for defining dependencies. Related steps and build commands for linux target should be defined in `ci/Jenkinsfile.prs.linux`.
|
||||||
|
|
||||||
|
## ci/Jenkinsfile.prs.linux
|
||||||
|
|
||||||
|
Two most important places in this file are `environment` and `stages`.
|
||||||
|
* `environment` - variables defined here will be accessible to every stage that runs on an image built from the `ci/Dockerfile`
|
||||||
|
* `stages` - used to group shell commands that are related to different steps and their layout reflects in the build job summary.
|
||||||
|
|
||||||
|
## ci/Jenkinsfile.prs.macos
|
||||||
|
|
||||||
|
Same as in `Jenkinsfile.prs.macos` the only difference is that instead of Docker image, macos is using `shell.nix` to build a shell with all dependencies. The steps defined here should be identical or similar to what's defined in linux file, just instead of running those commands straight in `sh`, use `nix.shell('command')` wrapper.
|
||||||
|
|
||||||
|
## shell.nix
|
||||||
|
|
||||||
|
Configuration file for the Nix package manager. It defines the build dependencies for `macos` target and can be used to manage and update the dependencies similarly to Dockerfile.
|
|
@ -0,0 +1,23 @@
|
||||||
|
{ pkgs ? import <nixpkgs> {
|
||||||
|
builtins = [(import (fetchTarball {
|
||||||
|
url = "https://github.com/NixOS/nixpkgs/archive/3389f23412877913b9d22a58dfb241684653d7e9.tar.gz";
|
||||||
|
sha256 = "sha256:0wgm7sk9fca38a50hrsqwz6q79z35gqgb9nw80xz7pfdr4jy9pf8";
|
||||||
|
}))];
|
||||||
|
overlays = [
|
||||||
|
(import (fetchGit {
|
||||||
|
url = "https://github.com/oxalica/rust-overlay.git";
|
||||||
|
rev = "fe185fac76e009b4bd543704a8c61077cf70155b";
|
||||||
|
}))
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}:
|
||||||
|
|
||||||
|
pkgs.mkShell {
|
||||||
|
name = "overwatch-build-shell";
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
pkg-config
|
||||||
|
rust-bin.stable."1.65.0".default
|
||||||
|
go_1_19
|
||||||
|
];
|
||||||
|
}
|
Loading…
Reference in New Issue