diff options
28 files changed, 114 insertions, 708 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 8c71c80d..e686e187 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ <!-- All PR should follow this template to allow a clean and transparent review --> <!-- Text placed between these delimiters is considered a comment and is not rendered --> -## Change Summary +## Change summary <!--- Provide a general summary of your changes in the Title above --> ## Types of changes @@ -21,27 +21,14 @@ the box, please use [x] <!-- optional: Link to related other tasks on Phabricator. --> <!-- * https://vyos.dev/Txxxx --> -## Component(s) name -<!-- A rather incomplete list of components: ethernet, wireguard, bgp, mpls, ldp, l2tp, dhcp ... --> - -## Proposed changes -<!--- Describe your changes in detail --> - -## How to test -<!--- -Please describe in detail how you tested your changes. Include details of your testing -environment, and the tests you ran. When pasting configs, logs, shell output, backtraces, -and other large chunks of text, surround this text with triple backtics -``` -like this -``` ---> +## Related PR(s) +<!-- Link here any PRs in other repositories that are required by this PR --> ## Checklist: <!--- Go over all the following points, and put an `x` in all the boxes that apply. --> <!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!--- The entire development process is outlined here: https://docs.vyos.io/en/latest/contributing/development.html --> -- [ ] I have read the [**CONTRIBUTING**](https://github.com/vyos/vyos-build/blob/current/CONTRIBUTING.md) document +- [ ] I have read the [**CONTRIBUTING**](https://github.com/vyos/vyos-1x/blob/current/CONTRIBUTING.md) document - [ ] I have linked this PR to one or more Phabricator Task(s) - [ ] My commit headlines contain a valid Task id - [ ] My change requires a change to the documentation diff --git a/.github/workflows/check-scripts-executable.yml b/.github/workflows/check-scripts-executable.yml deleted file mode 100644 index 123e9895..00000000 --- a/.github/workflows/check-scripts-executable.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: "Check for Jenkins build scripts has executable bit" - -on: - pull_request: - branches: - - current - - circinus - - sagitta - - equuleus - -permissions: - contents: read - -jobs: - check-scripts-executable: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - with: - repository: ${{ github.repository }} - - name: Checking scripts are executable - run: | - files=$(find packages/ -type f -name '*.py' -or -name '*.sh' -not -executable -print) - if [[ -n $files ]]; then - echo "Found files without executable bit:" - for file in $files; do - echo $file; - done; - exit 1; - fi - shell: bash diff --git a/.github/workflows/cleanup-mirror-pr-branch.yml b/.github/workflows/cleanup-mirror-pr-branch.yml new file mode 100644 index 00000000..bbe6aa2f --- /dev/null +++ b/.github/workflows/cleanup-mirror-pr-branch.yml @@ -0,0 +1,15 @@ +name: Cleanup pr mirror branch + +on: + pull_request: + types: [closed] + branches: + - current + +permissions: + contents: write + +jobs: + call-delete-branch: + uses: vyos/.github/.github/workflows/cleanup-mirror-pr-branch.yml@current + secrets: inherit diff --git a/.github/workflows/trigger-pr-mirror-repo-sync.yml b/.github/workflows/trigger-pr-mirror-repo-sync.yml new file mode 100644 index 00000000..d5e8ce3b --- /dev/null +++ b/.github/workflows/trigger-pr-mirror-repo-sync.yml @@ -0,0 +1,12 @@ +name: Trigger Mirror PR and Repo Sync +on: + pull_request_target: + types: + - closed + branches: + - current + +jobs: + call-trigger-mirror-pr-repo-sync: + uses: vyos/.github/.github/workflows/trigger-pr-mirror-repo-sync.yml@current + secrets: inherit diff --git a/.github/workflows/trigger_rebuild_packages.yml b/.github/workflows/trigger_rebuild_packages.yml index 33679a76..ffff020f 100644 --- a/.github/workflows/trigger_rebuild_packages.yml +++ b/.github/workflows/trigger_rebuild_packages.yml @@ -29,6 +29,8 @@ jobs: - 'scripts/package-build/amazon-ssm-agent/**' aws-gwlbtun: - 'scripts/package-build/aws-gwlbtun/**' + blackbox_exporter: + - 'scripts/package-build/blackbox_exporter/**' ddclient: - 'scripts/package-build/ddclient/**' dropbear: @@ -1 +1,2 @@ -* @vyos/reviewers +# Users from reviewers github team +* @dmbaturin @sarthurdev @jestabro @sever-sever @c-po @fett0 @nicolas-fort @zdc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3ff00df8..2f57a272 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,7 @@ task first. Once there is an entry in Phabricator, you should reference its id in your commit message, as shown below: * `ddclient: T1030: auto create runtime directories` -* `Jenkins: add current Git commit ID to build description` +* `keepalived: T1234: do not autostart service, will be done by CLI` If there is no [Phabricator](https://vyos.dev) reference in the commits of your pull request, we have to ask you to amend the commit message. diff --git a/Jenkinsfile.docker b/Jenkinsfile.docker deleted file mode 100644 index 2cac4548..00000000 --- a/Jenkinsfile.docker +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2019-2021 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -@NonCPS - -// Using a version specifier library, use 'current' branch. The underscore (_) -// is not a typo! You need this underscore if the line immediately after the -// @Library annotation is not an import statement! -@Library('vyos-build@current')_ -setDescription() - -pipeline { - agent none - environment { - GIT_BRANCH_NAME = getGitBranchName() - } - options { - disableConcurrentBuilds() - timeout(time: 240, unit: 'MINUTES') - timestamps() - buildDiscarder(logRotator(numToKeepStr: '20')) - } - stages { - stage('Build containers') { - when { - beforeOptions true - beforeAgent true - // Only run ISO image build process of explicit user request or - // once a night triggered by the timer. - anyOf { - changeset pattern: "**/docker/*" - changeset pattern: "**/Jenkinsfile.docker" - triggeredBy cause: "UserIdCause" - } - } - parallel { - stage('x86_64') { - agent { - label "ec2_amd64" - } - steps { - script { - DOCKER_IMAGE_AMD64 = "vyos/vyos-build:" + env.GIT_BRANCH_NAME - sh "docker build --no-cache --tag ${DOCKER_IMAGE_AMD64} docker" - if (! isCustomBuild()) { - withDockerRegistry([credentialsId: "DockerHub"]) { - sh "docker push ${DOCKER_IMAGE_AMD64}" - } - } - } - } - } - stage('arm64') { - agent { - label "ec2_arm64" - } - steps { - script { - DOCKER_IMAGE_ARM64 = "vyos/vyos-build:" + env.GIT_BRANCH_NAME + "-arm64" - sh "docker build --no-cache --tag ${DOCKER_IMAGE_ARM64} --build-arg ARCH=arm64v8/ docker" - if (! isCustomBuild()) { - withDockerRegistry([credentialsId: "DockerHub"]) { - sh "docker push ${DOCKER_IMAGE_ARM64}" - } - } - } - } - } - } - } - } -} @@ -40,7 +40,6 @@ There are several directories with their own purpose: * `scripts/` Scripts that are used for the build process * `tools/` Scripts that are used for maintainer's tasks automation and other purposes, but not during ISO build process - * `vars/` Jenkins Pipeline library for reusable functions # Building VyOS diff --git a/docker/Dockerfile b/docker/Dockerfile index 53f98512..a2e0a74d 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -204,7 +204,6 @@ RUN wget https://salsa.debian.org/klausenbusk-guest/debootstrap/commit/a9a603b17 sudo dpkg -i ../debootstrap*.deb # Packages needed for Linux Kernel -# gnupg2 is required by Jenkins for the TAR verification # cmake required by accel-ppp RUN apt-get update && apt-get install -y \ cmake \ diff --git a/scripts/package-build/blackbox_exporter/.gitignore b/scripts/package-build/blackbox_exporter/.gitignore new file mode 100644 index 00000000..435e791f --- /dev/null +++ b/scripts/package-build/blackbox_exporter/.gitignore @@ -0,0 +1 @@ +/blackbox_exporter/ diff --git a/scripts/package-build/blackbox_exporter/build.py b/scripts/package-build/blackbox_exporter/build.py new file mode 120000 index 00000000..3c76af73 --- /dev/null +++ b/scripts/package-build/blackbox_exporter/build.py @@ -0,0 +1 @@ +../build.py
\ No newline at end of file diff --git a/scripts/package-build/blackbox_exporter/build.sh b/scripts/package-build/blackbox_exporter/build.sh new file mode 100755 index 00000000..39a08230 --- /dev/null +++ b/scripts/package-build/blackbox_exporter/build.sh @@ -0,0 +1,66 @@ +#!/bin/sh +CWD=$(pwd) +set -e + +BUILD_ARCH=$(dpkg-architecture -qDEB_TARGET_ARCH) + +SRC="blackbox_exporter" +if [ ! -d ${SRC} ]; then + echo "Source directory does not exist, please 'git clone'" + exit 1 +fi + +cd $SRC + +mkdir -p debian + +echo "I: Create $SRC/debian/control" +cat <<EOF > debian/control +Source: blackbox-exporter +Section: net +Priority: optional +Maintainer: VyOS Package Maintainers <maintainers@vyos.net> +Build-Depends: debhelper-compat (= 13) +Standards-Version: 4.5.1 +Homepage: https://github.com/prometheus/blackbox_exporter + +Package: blackbox-exporter +Architecture: ${BUILD_ARCH} +Depends: \${shlibs:Depends}, \${misc:Depends} +Description: The blackbox exporter allows blackbox probing of endpoints over HTTP, HTTPS, DNS, TCP, ICMP and gRPC. +EOF + +echo "I: Create $SRC/debian/changelog" +cat <<EOF > debian/changelog +blackbox-exporter (0.25.0) UNRELEASED; urgency=medium + + * Upstream package + + -- VyOS Maintainers <maintainers@vyos.io> Thu, 26 Sep 2024 12:35:47 +0000 +EOF + +echo "I: Create $SRC/debian/rules" +cat <<EOF > debian/rules +#!/usr/bin/make -f + +clean: + @# Do nothing + +build: + @# Do nothing + +binary: + mkdir -p debian/blackbox-exporter + mkdir -p debian/blackbox-exporter/usr/sbin + mkdir -p debian/blackbox-exporter/run/blackbox_exporter + cp blackbox_exporter debian/blackbox-exporter/usr/sbin/blackbox_exporter + dh_gencontrol + dh_builddeb +EOF +chmod +x debian/rules + +echo "I: Build blackbox_exporter" +go build + +echo "I: Build Debian Package" +dpkg-buildpackage -uc -us -tc -b -d diff --git a/scripts/package-build/blackbox_exporter/package.toml b/scripts/package-build/blackbox_exporter/package.toml new file mode 100644 index 00000000..3cdc21b8 --- /dev/null +++ b/scripts/package-build/blackbox_exporter/package.toml @@ -0,0 +1,5 @@ +[[packages]] +name = "blackbox_exporter" +commit_id = "v0.25.0" +scm_url = "https://github.com/prometheus/blackbox_exporter" +build_cmd = "cd ..; y | ./build.sh" diff --git a/scripts/package-build/linux-kernel/README.md b/scripts/package-build/linux-kernel/README.md index 56954e5a..927e880c 100644 --- a/scripts/package-build/linux-kernel/README.md +++ b/scripts/package-build/linux-kernel/README.md @@ -5,9 +5,9 @@ # About -VyOS runs on a custom Linux Kernel (which is 4.19) at the time of this writing. -This repository holds a Jenkins Pipeline which is used to build the Custom -Kernel (x86_64/amd64 at the moment) and all required out-of tree modules. +VyOS runs on a custom Linux Kernel (which is 6.6) at the time of this writing. +This repository holds build scripts that are used to build the Custom Kernel +(x86_64/amd64 at the moment) and all required out-of tree modules. VyOS does not utilize the build in Intel Kernel drivers for its NICs as those Kernels sometimes lack features e.g. configurable receive-side-scaling queues. @@ -33,9 +33,3 @@ VyOS utilizes several Out-of-Tree modules (e.g. WireGuard, Accel-PPP and Intel network interface card drivers). Module source code is retrieved from the upstream repository and - when needed - patched so it can be build using this pipeline. - -In the past VyOS maintainers had a fork of the Linux Kernel, WireGuard and -Accel-PPP. This is fine but increases maintenance effort. By utilizing vanilla -repositories upgrading to new versions is very easy - only the branch/commit/tag -used when cloning the repository via [Jenkinsfile](Jenkinsfile) needs to be -adjusted. diff --git a/scripts/package-build/linux-kernel/arch/arm64/configs/vyos_defconfig b/scripts/package-build/linux-kernel/arch/arm64/configs/vyos_defconfig index 7b49f05f..91f26660 100644 --- a/scripts/package-build/linux-kernel/arch/arm64/configs/vyos_defconfig +++ b/scripts/package-build/linux-kernel/arch/arm64/configs/vyos_defconfig @@ -6194,7 +6194,7 @@ CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="ascii" CONFIG_FAT_DEFAULT_UTF8=y -# CONFIG_EXFAT_FS is not set +CONFIG_EXFAT_FS=m # CONFIG_NTFS_FS is not set # CONFIG_NTFS3_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems diff --git a/scripts/package-build/linux-kernel/arch/x86/configs/vyos_defconfig b/scripts/package-build/linux-kernel/arch/x86/configs/vyos_defconfig index 4c1a4adc..0230e949 100644 --- a/scripts/package-build/linux-kernel/arch/x86/configs/vyos_defconfig +++ b/scripts/package-build/linux-kernel/arch/x86/configs/vyos_defconfig @@ -5452,7 +5452,7 @@ CONFIG_VFAT_FS=m CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="ascii" CONFIG_FAT_DEFAULT_UTF8=y -# CONFIG_EXFAT_FS is not set +CONFIG_EXFAT_FS=m # CONFIG_NTFS_FS is not set # CONFIG_NTFS3_FS is not set # end of DOS/FAT/EXFAT/NT Filesystems diff --git a/vars/README.md b/vars/README.md deleted file mode 100644 index ca2f821f..00000000 --- a/vars/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Jenkins Build Library - -Instead of writing the same code over and over again, place the common -parts into a Jenkins Library which is then consumed by every individual -build Job. This not only makes it less complex, it also increases -maintainability by several magnitudes. diff --git a/vars/buildPackage.groovy b/vars/buildPackage.groovy deleted file mode 100644 index 531e51d9..00000000 --- a/vars/buildPackage.groovy +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020-2021 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call(description=null, pkgList=null, buildCmd=null, buildArm=false, changesPattern="**", buildLabel="ec2_amd64") { - // - description: Arbitrary text to print on Jenkins Job Description - // instead of package name - // - pkgList: Multiple packages can be build at once in a single Pipeline run - // - buildCmd: replace default build command "dpkg-buildpackage -uc -us -tc -b" - // with this custom version - // - buildArm: package will also be build for the arm64 platform - // - changesPattern: package will only be build if a change file matching this - // pattern is found - // - buildLabel: used to describe where the job should run. amd64 inside the - // string will be replaced with arm64 when those builds are enabled. - // Example: ec2_amd64 -> ec2_arm64 or foo_amd64 -> foo_arm64 - - setDescription(description) - - pipeline { - agent none - options { - disableConcurrentBuilds() - timeout(time: 240, unit: 'MINUTES') - timestamps() - buildDiscarder(logRotator(numToKeepStr: '10')) - } - stages { - stage('Define Agent') { - agent { - label "${buildLabel}" - } - when { - anyOf { - changeset "${changesPattern}" - triggeredBy cause: "UserIdCause" - } - } - steps { - script { - // create container name on demand - def branchName = getGitBranchName() - // Adjust PR target branch name so we can re-map it to the proper Docker image. - if (isPullRequest()) - branchName = env.CHANGE_TARGET.toLowerCase() - if (branchName.equals('master')) - branchName = 'current' - - env.DOCKER_IMAGE = 'vyos/vyos-build:' + branchName - - // Get the current UID and GID from the jenkins agent to allow use of the same UID inside Docker - env.USR_ID = sh(returnStdout: true, script: 'id -u').toString().trim() - env.GRP_ID = sh(returnStdout: true, script: 'id -g').toString().trim() - env.DOCKER_ARGS = '--sysctl net.ipv6.conf.lo.disable_ipv6=0 -e GOSU_UID=' + env.USR_ID + ' -e GOSU_GID=' + env.GRP_ID - } - } - } - stage('Build Code') { - when { - anyOf { - changeset pattern: changesPattern, caseSensitive: true - triggeredBy cause: "UserIdCause" - } - } - parallel { - stage('amd64') { - agent { - docker { - label "${buildLabel}" - args "${env.DOCKER_ARGS}" - image "${env.DOCKER_IMAGE}" - alwaysPull true - reuseNode true - } - } - steps { - script { - cloneAndBuild(description, 'amd64', pkgList, buildCmd) - stash includes: '**/*.deb', name: 'binary-amd64', allowEmpty: true - try { - stash includes: '**/*.dsc', name: 'source-dsc' - stash includes: '**/*.tar.*z', name: 'source-tar' - } catch (e) { - print "Stashing failed, ignoring - no source packages" - currentBuild.result = 'SUCCESS' - } - } - } - post { - cleanup { - deleteDir() - } - } - } - stage('arm64') { - agent { - docker { - label "${buildLabel.replace('amd64', 'arm64')}" - args "${env.DOCKER_ARGS}" - image "${env.DOCKER_IMAGE}-arm64" - alwaysPull true - reuseNode true - } - } - when { - equals expected: true, actual: buildArm - } - steps { - script { - cloneAndBuild(description, 'arm64', pkgList, buildCmd) - stash includes: '**/*arm64.deb', name: 'binary-arm64', allowEmpty: true - } - } - post { - cleanup { - deleteDir() - } - } - } - } - } - stage("Finalize") { - when { - anyOf { - changeset pattern: changesPattern, caseSensitive: true - triggeredBy cause: "UserIdCause" - } - } - agent { - label "${buildLabel}" - } - steps { - script { - // Unpack files for amd64, sources and arm64 if packages got build - try { - unstash 'binary-amd64' - unstash 'binary-arm64' - } catch (e) { - print "Unstash failed, ignoring - could be because there exists no arm64 build" - currentBuild.result = 'SUCCESS' - } - try { - unstash 'source-dsc' - unstash 'source-tar' - } catch (e) { - print "Unstash failed, ignoring - no source packages" - currentBuild.result = 'SUCCESS' - } - if (isCustomBuild()) { - echo "Build not started from official Git repository! Artifacts are not uploaded to external repository" - return - } - - echo "Uploading Artifacts to external repository" - copyArtifacts fingerprintArtifacts: true, projectName: '${JOB_NAME}', selector: specific('${BUILD_NUMBER}') - - // build up some fancy groovy variables so we do not need to write/copy - // every option over and over again! - def RELEASE = getGitBranchName() - if (getGitBranchName() == "master") - RELEASE = 'current' - - def VYOS_REPO_PATH = '/home/sentrium/web/dev.packages.vyos.net/public_html/repositories/' + RELEASE - if (getGitBranchName() == "crux") - VYOS_REPO_PATH += '/vyos' - - def SSH_OPTS = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o LogLevel=ERROR' - def SSH_REMOTE = env.DEV_PACKAGES_VYOS_NET_HOST // defined as global variable - def SSH_DIR = '~/VyOS/' + RELEASE - - sshagent(['SSH-dev.packages.vyos.net']) { - - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"bash --login -c 'mkdir -p ${SSH_DIR}'\"") - - // Removing of source and binary packages should be BEFORE adding new ones. Else "reprepro [remove/removesrc]" command may remove [source/binary] package correspondingly (behavior depends on package links). - // To omit this feature(bug?) do not merge removing-adding sequence by sources and binaries as it used to be - files = findFiles(glob: '**/*.dsc') - if (files) { - echo "Remove deprecated source package(s) from the repository..." - files.each { FILE -> - def PACKAGE = sh(returnStdout: true, script: "cat ${FILE} | grep Source ").trim().tokenize(' ').last() - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} removesrc ${RELEASE} ${PACKAGE}'\"") - } - } - files = findFiles(glob: '**/*-build-deps_*.deb') - if (files) { - echo "Remove Debian build dependency files from the workspace..." - files.each { FILE -> - sh(script: "rm -f ${FILE}") - } - } - - files = findFiles(glob: '**/*.deb') - if (files) { - echo "Remove deprecated binary package(s) from the repository..." - files.each { FILE -> - // NOTE: Groovy is a pain in the ass and " quotes differ from ', so all shell code must use " in the beginning - def PACKAGE = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Package").trim() - def PACKAGE_ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Architecture").trim() - def ARCH = '' - if (PACKAGE_ARCH != 'all') - ARCH = '-A ' + PACKAGE_ARCH - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH} remove ${RELEASE} ${PACKAGE}'\"") - } - } - - files = findFiles(glob: '**/*.tar.*z') - if (files) { - echo "Uploading tarball package(s) to the repository..." - files.each { FILE -> - sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") - } - } - - files = findFiles(glob: '**/*.dsc') - if (files) { - echo "Uploading *.dsc package(s) to the repository..." - files.each { FILE -> - def PACKAGE = sh(returnStdout: true, script: "cat ${FILE} | grep Source ").trim().tokenize(' ').last() - sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") - def FILENAME = FILE.toString().tokenize('/').last() - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} includedsc ${RELEASE} ${SSH_DIR}/${FILENAME}'\"") - } - } - - files = findFiles(glob: '**/*.deb') - if (files) { - echo "Uploading binary package(s) to the repository ..." - files.each { FILE -> - // NOTE: Groovy is a pain in the ass and " quotes differ from ', so all shell code must use " in the beginning - def PACKAGE = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Package").trim() - def PACKAGE_ARCH = sh(returnStdout: true, script: "dpkg-deb -f ${FILE} Architecture").trim() - def ARCH = '' - if (PACKAGE_ARCH != 'all') - ARCH = '-A ' + PACKAGE_ARCH - sh(script: "scp ${SSH_OPTS} ${FILE} ${SSH_REMOTE}:${SSH_DIR}") - // Packages like FRR produce their binary in a nested path e.g. packages/frr/frr-rpki-rtrlib-dbgsym_7.5_arm64.deb, - // thus we will only extract the filename portion from FILE as the binary is scp'ed to SSH_DIR without any subpath. - def FILENAME = FILE.toString().tokenize('/').last() - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} ${ARCH} includedeb ${RELEASE} ${SSH_DIR}/${FILENAME}'\"") - } - sh(script: "ssh ${SSH_OPTS} ${SSH_REMOTE} -t \"uncron-add 'reprepro -v -b ${VYOS_REPO_PATH} deleteunreferenced'\"") - } - } - } - } - post { - cleanup { - deleteDir() - } - } - } - } - } -} diff --git a/vars/cloneAndBuild.groovy b/vars/cloneAndBuild.groovy deleted file mode 100644 index f4114a68..00000000 --- a/vars/cloneAndBuild.groovy +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2021 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call(description, architecture, pkgList, buildCmd) { - // package build must be done in "any" subdir. Without it the Debian build system - // is unable to generate the *.deb files in the sources parent directory, which - // will cause a "Permission denied" error. - dir ("build-${architecture}") { - // cleanup - deleteDir() - - // checkout git repository which hold 'Jenkinsfile' - checkout scm - - // Display Git commit Id used with the Jenkinsfile on the Job "Build History" pane - def commitId = sh(returnStdout: true, script: 'git rev-parse --short=11 HEAD').trim() - currentBuild.description = sprintf('Git SHA1: %s', commitId[-11..-1]) - - if (pkgList) { - // Fetch individual package source code, but only if a URL is defined, this will - // let us reuse this script for packages like vyos-1x which ship a Jenkinfile in - // their repositories root folder. - pkgList.each { pkg -> - if (pkg.scmUrl && pkg.scmCommit) { - dir(getJenkinsfilePath() + pkg.name) { - checkout([$class: 'GitSCM', - doGenerateSubmoduleConfigurations: false, - extensions: [[$class: 'CleanCheckout']], - branches: [[name: pkg.scmCommit]], - userRemoteConfigs: [[url: pkg.scmUrl]]]) - } - } - } - } - - // compile the source(s) ... - if (pkgList) { - pkgList.each { pkg -> - dir(getJenkinsfilePath() + pkg.name) { - sh pkg.buildCmd - } - } - } else if (buildCmd) { - sh buildCmd - } else { - // build dependency package and install it - sh """ - if [ -f debian/control ]; then - sudo mk-build-deps --install --tool "apt-get --yes --no-install-recommends" - sudo dpkg -i *build-deps*.deb - fi - """ - try { - sh 'dpkg-buildpackage -uc -us -tc -F' - } catch (e) { - print "Source packages build failed, ignoring - building binaries only" - currentBuild.result = 'SUCCESS' - sh 'dpkg-buildpackage -uc -us -tc -b' - } - } - } - if (architecture == 'amd64') { - archiveArtifacts artifacts: "**/*.deb", fingerprint: true - try { - archiveArtifacts artifacts: "**/*.dsc", fingerprint: true - archiveArtifacts artifacts: "**/*.tar.*z", fingerprint: true - } catch (e) { - print "Archiving failed, ignoring - no source packages" - currentBuild.result = 'SUCCESS' - } - } else { - archiveArtifacts artifacts: "**/*_${architecture}.deb", fingerprint: true - } -} diff --git a/vars/getChangeSetPath.groovy b/vars/getChangeSetPath.groovy deleted file mode 100644 index 195f999a..00000000 --- a/vars/getChangeSetPath.groovy +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - tmp = getJenkinsfilePath() - if (tmp) - tmp = "**/" + tmp + "*" - else - tmp = "**/*" - echo tmp - return tmp -} - diff --git a/vars/getGitBranchName.groovy b/vars/getGitBranchName.groovy deleted file mode 100644 index 133734da..00000000 --- a/vars/getGitBranchName.groovy +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - def branch = scm.branches[0].name - return branch.split('/')[-1] -} - diff --git a/vars/getGitRepoName.groovy b/vars/getGitRepoName.groovy deleted file mode 100644 index 058e4ff5..00000000 --- a/vars/getGitRepoName.groovy +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - return getGitRepoURL().split('/').last() -} - diff --git a/vars/getGitRepoURL.groovy b/vars/getGitRepoURL.groovy deleted file mode 100644 index d36b48e6..00000000 --- a/vars/getGitRepoURL.groovy +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - return scm.userRemoteConfigs[0].url -} - diff --git a/vars/getJenkinsfilePath.groovy b/vars/getJenkinsfilePath.groovy deleted file mode 100644 index a6690f5e..00000000 --- a/vars/getJenkinsfilePath.groovy +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - tmp = currentBuild.rawBuild.parent.definition.scriptPath.replace('Jenkinsfile', '') - if (tmp == null) { - tmp = '' - } - return tmp -} - diff --git a/vars/isCustomBuild.groovy b/vars/isCustomBuild.groovy deleted file mode 100644 index c60ed883..00000000 --- a/vars/isCustomBuild.groovy +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - // Returns true if this is a custom build launched on any project fork. - // Returns false if this is build from git@github.com:vyos/<reponame>. - // <reponame> can be e.g. vyos-1x.git - // GitHub organisation base URL - def gitURI = 'git@github.com:vyos/' + getGitRepoName() - def httpURI = 'https://github.com/vyos/' + getGitRepoName() - - return !((getGitRepoURL() == gitURI) || (getGitRepoURL() == httpURI)) || isPullRequest() -} diff --git a/vars/isPullRequest.groovy b/vars/isPullRequest.groovy deleted file mode 100644 index 813341bc..00000000 --- a/vars/isPullRequest.groovy +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call() { - if (env.CHANGE_ID) { - return true - } - return false -} diff --git a/vars/setDescription.groovy b/vars/setDescription.groovy deleted file mode 100644 index 683dc20c..00000000 --- a/vars/setDescription.groovy +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/env groovy -// Copyright (C) 2020 VyOS maintainers and contributors -// -// This program is free software; you can redistribute it and/or modify -// in order to easy exprort images built to "external" world -// it under the terms of the GNU General Public License version 2 or later as -// published by the Free Software Foundation. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -def call(text = null) { - def item = Jenkins.instance.getItemByFullName(env.JOB_NAME) - - // build up the main description text - def description = "" - if (text) { - description += "<h2>VyOS package build: " + text + "</h2>" - } else { - description += "<h2>VyOS package build: " + getGitRepoName().replace('.git', '') + "</h2>" - } - - if (isCustomBuild()) { - description += "<p style='border: 3px dashed red; width: 50%;'>" - description += "<b>Build not started from official Git repository!</b><br>" - description += "<br>" - description += "Repository: <font face = 'courier'>" + getGitRepoURL() + "</font><br>" - description += "Branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" - description += "</p>" - } else { - description += "Sources taken from Git branch: <font face = 'courier'>" + getGitBranchName() + "</font><br>" - } - - item.setDescription(description) - item.save() -} - |