initial commit

This commit is contained in:
2023-11-15 18:48:30 +03:00
commit 4e9a628549
3 changed files with 105 additions and 0 deletions

70
README.md Normal file
View File

@@ -0,0 +1,70 @@
# Helper class for Jenkins
This repo add functionality for automate building with `platforms.json` configuration.
## Setup
You should add `PLATFORMS_GIT` environment to your Jenkins with url to git repo, which
contains single `platforms.json` file.
Next you should register this library in Jenkins -> System settings -> Global Pipeline Libraries:
* Library name: `SHS.Platforms`
* Default version: `master`
* Project Repository: `https://git.shs.tools/SHS/jenkins_lib.git`
## API
`org.SHS.Platforms` Class:
* `get()` - download and parse `platforms.json` file from `PLATFORMS_GIT`
* `root()` - returns root JSON object of `platforms.json`
* `forEach(func, ...)` - iterate over platforms, `func` is only mandatory parameter:
* `func` - method to execute for each enabled platform, pass JSON element of current platform and optional CMake toolchain argument
* `stagePrefix` - prefix string for `stage`
* `stageSuffix` - suffix string for `stage`
* `whiteList` - array of permitted names, ignored if empty
* `blackList` - array of denied names, ignored if empty
`whiteList` and `blackList` are case-insensitive, and can be part of platform name
## Usage
Simple:
```
@Library('SHS.Platforms') _
node {
def pl = new org.SHS.Platforms(this)
pl.get()
pl.forEach ({ dist ->
print("works in ${dist.docker_image}")
})
}
```
With toolchain:
```
@Library('SHS.Platforms') _
node {
def pl = new org.SHS.Platforms(this)
pl.get()
pl.forEach ({ dist, cmake_toolchain ->
print("compile in ${dist.docker_image} with arg ${cmake_toolchain}")
})
}
```
With filter:
```
@Library('SHS.Platforms') _
node {
def pl = new org.SHS.Platforms(this)
pl.get()
pl.forEach ({ dist ->
print("works in ${dist.docker_image}")
},
stagePrefix: "Build ",
stageSuffix: " soft",
whiteList: ["ubuntu", "debian", "osx"],
blackList: ["20.04", "11"]
)
}
```

34
src/org/SHS/SDK.groovy Normal file
View File

@@ -0,0 +1,34 @@
package org.SHS
@Library('SHS.Platforms') _
class SDK {
def steps
def pl
public SDK(steps) {
this.steps = steps
this.pl = new org.SHS.Platforms(this.steps)
}
public void build() {
steps.stage("Download sources") {
steps.checkout scm
}
//pl.get()
pl._root = steps.readJSON(file: '${env.SHSSDK_DIR}/platforms.json')
pl.forEach ({ dist, cmake_toolchain ->
print("compile in ${dist.docker_image} with arg ${cmake_toolchain}")
/*steps.docker.image("${dist.docker_image}-shssdk").inside() {
steps.sh "rm -rf ./release"
steps.sh "mkdir -p build"
steps.sh "cd build && rm -rf ./* && cmake -G Ninja ${toolchain} -DBUILD_NUMBER=${env.BUILD_NUMBER} -DCMAKE_INSTALL_PREFIX=../release ../src"
steps.sh "cd build && cmake --build ./ --target install -j${env.JOBS_COUNT}"
steps.archiveArtifacts 'release/*/*/*'
steps.sh 'rm -rf ./build ./bin ./release ./builds'
},
//whiteList: ["ubuntu", "debian", "osx"],
blackList: ["android"]*/
)
}
}

1
vars/SHS.txt Normal file
View File

@@ -0,0 +1 @@
libraryVersion = '0.0.1'