moved all to subfolder nixos
This commit is contained in:
parent
78d39395b7
commit
15c6866362
263 changed files with 638 additions and 762 deletions
nixos/library
22
nixos/library/default.nix
Normal file
22
nixos/library/default.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
{ pkgs, lib, ... }: {
|
||||
desktopFile = bin:
|
||||
{ comment ? "No Comment", longName ? "Script"
|
||||
, command ? "${bin}/bin/${bin.name}", ... }:
|
||||
pkgs.writeTextFile {
|
||||
name = "${bin.name}.desktop";
|
||||
destination = "/share/applications/${bin.name}.desktop";
|
||||
text = ''
|
||||
[Desktop Entry]
|
||||
Type=Application
|
||||
Exec=${command} %U
|
||||
Comment=${comment}
|
||||
Terminal=false
|
||||
Name=${bin.name}
|
||||
GenericName=${longName}
|
||||
StartupWMClass=${bin.name}
|
||||
'';
|
||||
};
|
||||
|
||||
jenkins = import ./jenkins.nix { inherit lib; };
|
||||
|
||||
}
|
150
nixos/library/jenkins.nix
Normal file
150
nixos/library/jenkins.nix
Normal file
|
@ -0,0 +1,150 @@
|
|||
{ lib, ... }:
|
||||
|
||||
with builtins;
|
||||
|
||||
# https://jenkinsci.github.io/job-dsl-plugin/
|
||||
|
||||
{
|
||||
# source container url and credentialsId
|
||||
job = name:
|
||||
{ url, credentialsId, branch ? "master",
|
||||
# https://docs.openstack.org/infra/jenkins-job-builder/triggers.html
|
||||
triggers ? [{
|
||||
pollscm = {
|
||||
cron = "H/30 * * * *";
|
||||
ignore-post-commit-hooks = true;
|
||||
};
|
||||
}], ... }:
|
||||
config: {
|
||||
job = {
|
||||
inherit name triggers;
|
||||
sandbox = true;
|
||||
project-type = "pipeline";
|
||||
dsl = let
|
||||
stage = elem:
|
||||
let
|
||||
stageName = head (attrNames elem);
|
||||
stateScripts = map (stage:
|
||||
lib.getAttr (typeOf stage) {
|
||||
string = ''
|
||||
withEnv(['PATH=/run/current-system/sw/bin/','NIX_PATH=/var/src/']) {
|
||||
sh '${toString stage}'
|
||||
}'';
|
||||
set = let
|
||||
script = ''
|
||||
withEnv(['PATH=/run/current-system/sw/bin/','NIX_PATH=/var/src/']) {
|
||||
sh '${toString stage.script}'
|
||||
}
|
||||
'';
|
||||
in if (stage.credentialsId != null) then ''
|
||||
sshagent(['${stage.credentialsId}']) { ${script} }
|
||||
'' else
|
||||
script;
|
||||
}) (getAttr stageName elem);
|
||||
in ''
|
||||
stage('${stageName}') {
|
||||
steps {
|
||||
${concatStringsSep "\n" stateScripts}
|
||||
}
|
||||
}
|
||||
'';
|
||||
stages = map stage config;
|
||||
in ''
|
||||
pipeline {
|
||||
agent any
|
||||
post {
|
||||
failure {
|
||||
mattermostSend channel: 'notification', color: '#FF0000', message: "Failed to build : [''${env.JOB_NAME}-''${env.BUILD_NUMBER}](''${env.BUILD_URL})"
|
||||
}
|
||||
success {
|
||||
mattermostSend channel: 'jenkins', color: '#00FF00', message: "Successfully build : [''${env.JOB_NAME}-''${env.BUILD_NUMBER}](''${env.JOB_URL})"
|
||||
}
|
||||
}
|
||||
stages{
|
||||
stage('Pull') {
|
||||
steps {
|
||||
checkout(
|
||||
[$class: 'GitSCM'
|
||||
, branches: [[name: '*/${branch}']]
|
||||
, doGenerateSubmoduleConfigurations: false
|
||||
, extensions: [[$class: 'LocalBranch', localBranch: 'master']]
|
||||
, submoduleCfg: []
|
||||
, userRemoteConfigs:
|
||||
[[ credentialsId: '${credentialsId}'
|
||||
, url: '${url}']]
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
${concatStringsSep "\n" stages}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# creates a sync job
|
||||
# source and target container url and credentialsId
|
||||
syncJob = name: source: target: {
|
||||
job = {
|
||||
name = name;
|
||||
sandbox = true;
|
||||
project-type = "pipeline";
|
||||
triggers = [{
|
||||
pollscm = {
|
||||
cron = "H/30 * * * *";
|
||||
ignore-post-commit-hooks = true;
|
||||
};
|
||||
}];
|
||||
dsl = ''
|
||||
pipeline {
|
||||
agent any
|
||||
post {
|
||||
failure {
|
||||
mattermostSend channel: 'notification', color: '#FF0000', message: "Failed to build : [''${env.JOB_NAME}-''${env.BUILD_NUMBER}](''${env.BUILD_URL})"
|
||||
}
|
||||
success {
|
||||
mattermostSend channel: 'jenkins', color: '#00FF00', message: "Successfully build : [''${env.JOB_NAME}-''${env.BUILD_NUMBER}](''${env.JOB_URL})"
|
||||
}
|
||||
}
|
||||
stages{
|
||||
stage('Pull') {
|
||||
steps {
|
||||
checkout(
|
||||
[$class: 'GitSCM'
|
||||
, branches: [[name: '*/master']]
|
||||
, doGenerateSubmoduleConfigurations: false
|
||||
, extensions: [[$class: 'LocalBranch', localBranch: 'master']]
|
||||
, submoduleCfg: []
|
||||
, userRemoteConfigs:
|
||||
[[ credentialsId: '${source.credentialsId}'
|
||||
, url: '${source.url}']]
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
stage('Push') {
|
||||
steps {
|
||||
sshagent(['${target.credentialsId}']) {
|
||||
withEnv(['PATH=/run/current-system/sw/bin/','NIX_PATH=/var/src/']) {
|
||||
sh "git push -f ${target.url}"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Push Tags') {
|
||||
steps {
|
||||
sshagent(['${target.credentialsId}']) {
|
||||
withEnv(['PATH=/run/current-system/sw/bin/']) {
|
||||
sh "git push -f ${target.url} --tags"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue