From ad1ffe4e56e571f360819965c2cafec9f8ac5f93 Mon Sep 17 00:00:00 2001 From: gounthar Date: Mon, 3 Jul 2023 17:01:25 +0200 Subject: [PATCH 01/13] feature(updatecli): Tracks npm in Makefile --- updatecli/updatecli.d/node.yaml | 207 ++++++++++++++++++++++++++++++++ updatecli/updatecli.d/npm.yaml | 52 ++++++++ 2 files changed, 259 insertions(+) create mode 100644 updatecli/updatecli.d/node.yaml create mode 100644 updatecli/updatecli.d/npm.yaml diff --git a/updatecli/updatecli.d/node.yaml b/updatecli/updatecli.d/node.yaml new file mode 100644 index 00000000..ec58351b --- /dev/null +++ b/updatecli/updatecli.d/node.yaml @@ -0,0 +1,207 @@ +--- +name: Bumps the node docker images versions + +scms: + default: + kind: github + spec: + user: "{{ .github.user }}" + email: "{{ .github.email }}" + owner: "{{ .github.owner }}" + repository: "{{ .github.repository }}" + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + branch: "{{ .github.branch }}" + +sources: + nodeLatestVersion: + kind: githubrelease + spec: + owner: "nodejs" + repository: "node" + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + transformers: + - trimprefix: "v" + alpineLatestVersion: + kind: githubrelease + name: "Get the latest Alpine Linux version" + spec: + owner: "alpinelinux" + repository: "aports" # Its release process follows Alpine's + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + versionfilter: + kind: semver + pattern: "~3" + transformers: + - findsubmatch: + pattern: >- + v(.*)(\.\d+) + captureindex: 1 + +conditions: + testNodeArg: + name: "Does the 'Hello World!' tutorial have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: content/doc/pipeline/tour/hello-world.adoc + matchpattern: >- + .*agent.*docker.*image.*node:.* + testNodeInAgentsDocumentation: + name: "Does the 'Defining execution environments' documentation have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: content/doc/pipeline/tour/agents.adoc + matchpattern: >- + .*docker.*image.*node:.* + testNodeInStyleGuideDocumentation: + name: "Does the 'Jenkins Documentation Style Guide' documentation have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: STYLEGUIDE.adoc + matchpattern: >- + .*docker.*image.*node:.* + testNodeInPipelineProjectCreationTutorial: + name: "Does the 'End-to-End Multibranch Pipeline Project Creation' documentation have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: content/doc/tutorials/build-a-multibranch-pipeline-project.adoc + matchpattern: >- + .*image.*node:.* + testNodeInBuildANodeJsAndReactAppWithNpmTutorial: + name: "Does the 'End-to-End Multibranch Pipeline Project Creation' documentation have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc + matchpattern: >- + .*image.*node:.* + testNodeInUsingDockerWithPipelineDocumentation: + name: "Does the 'Using Docker with Pipeline' documentation have a reference to the Node alpine image?" + kind: file + disablesourceinput: true + spec: + file: content/doc/book/pipeline/docker.adoc + matchpattern: >- + .*image.*node:.* + testNodeAlpineImagePublished: + name: "Test node:-alpine docker image tag" + kind: dockerimage + disablesourceinput: true + spec: + image: "node" + tag: '{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}' + +targets: + updateHelloWorldTutorialNodePipeline: + name: "Update the value of the node docker image for pipelines in the 'Hello World!' tutorial" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/pipeline/tour/hello-world.adoc + matchpattern: >- + (.*agent.*docker.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateHelloWorldTutorialNodeScripted: + name: "Update the value of the node docker image for scripts in the 'Hello World!' tutorial" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/pipeline/tour/hello-world.adoc + matchpattern: >- + (.*docker.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateAgentsDocumentation: + name: "Update the value of the node docker image in the 'Defining execution environments' documentation" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/pipeline/tour/agents.adoc + matchpattern: >- + (.*docker.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateStyleGuideDocumentation: + name: "Update the value of the node docker image in the 'Jenkins Documentation Style Guide' documentation" + kind: file + sourceid: nodeLatestVersion + spec: + file: STYLEGUIDE.adoc + matchpattern: >- + (.*docker.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updatePipelineProjectCreationTutorial: + name: "Update the value of the node docker image in the 'End-to-End Multibranch Pipeline Project Creation' tutorial" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/tutorials/build-a-multibranch-pipeline-project.adoc + matchpattern: >- + (.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateBuildANodeJsAndReactAppWithNpmTutorial: + name: "Update the value of the node docker image in the 'Build a Node.js and React app with npm' tutorial" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc + matchpattern: >- + (.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateBuildANodeJsAndReactAppWithNpmDockerHubLinkTutorial: + name: "Update the value of the node docker image in the 'Build a Node.js and React app with npm' tutorial" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc + matchpattern: >- + (https.*\`)node:(.*)(\`.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateUsingDockerWithPipelineDocumentation: + name: "Update the value of the node docker image in the 'Using Docker with Pipeline' documentation" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/book/pipeline/docker.adoc + matchpattern: >- + (.*image.*\')node:(.*)(\'.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default + updateUsingDockerWithPipelineDocumentationDockerExample: + name: "Update the value of the node docker image in the 'Using Docker with Pipeline' documentation" + kind: file + sourceid: nodeLatestVersion + spec: + file: content/doc/book/pipeline/docker.adoc + matchpattern: >- + (FROM )node:(.*)(.*) + replacepattern: >- + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + scmid: default +actions: + default: + kind: github/pullrequest + scmid: default + title: Bump node alpine docker image version to {{ source "nodeLatestVersion" }} + spec: + labels: + - dependencies \ No newline at end of file diff --git a/updatecli/updatecli.d/npm.yaml b/updatecli/updatecli.d/npm.yaml new file mode 100644 index 00000000..bf59cdeb --- /dev/null +++ b/updatecli/updatecli.d/npm.yaml @@ -0,0 +1,52 @@ +--- +name: Bumps the npm versions + +scms: + default: + kind: github + spec: + user: "{{ .github.user }}" + email: "{{ .github.email }}" + owner: "{{ .github.owner }}" + repository: "{{ .github.repository }}" + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + branch: "{{ .github.branch }}" + +sources: + npmLatestVersion: + kind: githubrelease + spec: + owner: "npm" + repository: "cli" + token: "{{ requiredEnv .github.token }}" + username: "{{ .github.username }}" + versionfilter: + kind: regex + pattern: >- + ^v\d+\.\d+.\d+$ + transformers: + - trimprefix: "v" + +conditions: + testNodeArg: + name: "Does the Makefile have a reference to npm?" + kind: file + disablesourceinput: true + spec: + file: Makefile + matchpattern: >- + .*npm.* install.*-g.*npm@.*.*npm.*install.* + +targets: + updateMakefile: + name: "Update the value of the npm version in the Makefile" + kind: file + sourceid: npmLatestVersion + spec: + file: Makefile + matchpattern: >- + (.*sh -c "npm install -g npm@)(.*)( && npm install)(.*) + replacepattern: >- + ${1}{{ source "npmLatestVersion" }}${3}${{4}} + scmid: default \ No newline at end of file From f82cd5c9804f6308a6f7f68fc4c8ae44406f4d0e Mon Sep 17 00:00:00 2001 From: gounthar Date: Mon, 3 Jul 2023 17:10:52 +0200 Subject: [PATCH 02/13] fix(updatecli): Creates a pull request --- updatecli/updatecli.d/npm.yaml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/updatecli/updatecli.d/npm.yaml b/updatecli/updatecli.d/npm.yaml index bf59cdeb..871499ad 100644 --- a/updatecli/updatecli.d/npm.yaml +++ b/updatecli/updatecli.d/npm.yaml @@ -1,5 +1,5 @@ --- -name: Bumps the npm versions +name: Bumps the npm version scms: default: @@ -40,7 +40,7 @@ conditions: targets: updateMakefile: - name: "Update the value of the npm version in the Makefile" + name: "Updates the value of the npm version in the Makefile" kind: file sourceid: npmLatestVersion spec: @@ -49,4 +49,14 @@ targets: (.*sh -c "npm install -g npm@)(.*)( && npm install)(.*) replacepattern: >- ${1}{{ source "npmLatestVersion" }}${3}${{4}} - scmid: default \ No newline at end of file + scmid: default + + +actions: + default: + kind: github/pullrequest + scmid: default + title: Bump npm version to {{ source "npmLatestVersion" }} + spec: + labels: + - dependencies \ No newline at end of file From 7572974cbed4eba9d63b2a32e2d2710346656def Mon Sep 17 00:00:00 2001 From: gounthar Date: Mon, 3 Jul 2023 17:11:10 +0200 Subject: [PATCH 03/13] feature(updatecli): Tracks node in Makefile --- updatecli/updatecli.d/node.yaml | 147 +++----------------------------- 1 file changed, 10 insertions(+), 137 deletions(-) diff --git a/updatecli/updatecli.d/node.yaml b/updatecli/updatecli.d/node.yaml index ec58351b..bdf296d5 100644 --- a/updatecli/updatecli.d/node.yaml +++ b/updatecli/updatecli.d/node.yaml @@ -1,5 +1,5 @@ --- -name: Bumps the node docker images versions +name: Bumps the node docker images version scms: default: @@ -42,53 +42,13 @@ sources: conditions: testNodeArg: - name: "Does the 'Hello World!' tutorial have a reference to the Node alpine image?" + name: "Does the Makefile have a reference to the Node alpine image?" kind: file disablesourceinput: true spec: - file: content/doc/pipeline/tour/hello-world.adoc + file: Makefile matchpattern: >- - .*agent.*docker.*image.*node:.* - testNodeInAgentsDocumentation: - name: "Does the 'Defining execution environments' documentation have a reference to the Node alpine image?" - kind: file - disablesourceinput: true - spec: - file: content/doc/pipeline/tour/agents.adoc - matchpattern: >- - .*docker.*image.*node:.* - testNodeInStyleGuideDocumentation: - name: "Does the 'Jenkins Documentation Style Guide' documentation have a reference to the Node alpine image?" - kind: file - disablesourceinput: true - spec: - file: STYLEGUIDE.adoc - matchpattern: >- - .*docker.*image.*node:.* - testNodeInPipelineProjectCreationTutorial: - name: "Does the 'End-to-End Multibranch Pipeline Project Creation' documentation have a reference to the Node alpine image?" - kind: file - disablesourceinput: true - spec: - file: content/doc/tutorials/build-a-multibranch-pipeline-project.adoc - matchpattern: >- - .*image.*node:.* - testNodeInBuildANodeJsAndReactAppWithNpmTutorial: - name: "Does the 'End-to-End Multibranch Pipeline Project Creation' documentation have a reference to the Node alpine image?" - kind: file - disablesourceinput: true - spec: - file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc - matchpattern: >- - .*image.*node:.* - testNodeInUsingDockerWithPipelineDocumentation: - name: "Does the 'Using Docker with Pipeline' documentation have a reference to the Node alpine image?" - kind: file - disablesourceinput: true - spec: - file: content/doc/book/pipeline/docker.adoc - matchpattern: >- - .*image.*node:.* + .*docker.*run.*node:.* testNodeAlpineImagePublished: name: "Test node:-alpine docker image tag" kind: dockerimage @@ -98,110 +58,23 @@ conditions: tag: '{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}' targets: - updateHelloWorldTutorialNodePipeline: - name: "Update the value of the node docker image for pipelines in the 'Hello World!' tutorial" + updateMakefile: + name: "Updates the value of the node docker image in the Makefile" kind: file sourceid: nodeLatestVersion spec: - file: content/doc/pipeline/tour/hello-world.adoc + file: Makefile matchpattern: >- - (.*agent.*docker.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateHelloWorldTutorialNodeScripted: - name: "Update the value of the node docker image for scripts in the 'Hello World!' tutorial" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/pipeline/tour/hello-world.adoc - matchpattern: >- - (.*docker.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateAgentsDocumentation: - name: "Update the value of the node docker image in the 'Defining execution environments' documentation" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/pipeline/tour/agents.adoc - matchpattern: >- - (.*docker.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateStyleGuideDocumentation: - name: "Update the value of the node docker image in the 'Jenkins Documentation Style Guide' documentation" - kind: file - sourceid: nodeLatestVersion - spec: - file: STYLEGUIDE.adoc - matchpattern: >- - (.*docker.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updatePipelineProjectCreationTutorial: - name: "Update the value of the node docker image in the 'End-to-End Multibranch Pipeline Project Creation' tutorial" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/tutorials/build-a-multibranch-pipeline-project.adoc - matchpattern: >- - (.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateBuildANodeJsAndReactAppWithNpmTutorial: - name: "Update the value of the node docker image in the 'Build a Node.js and React app with npm' tutorial" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc - matchpattern: >- - (.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateBuildANodeJsAndReactAppWithNpmDockerHubLinkTutorial: - name: "Update the value of the node docker image in the 'Build a Node.js and React app with npm' tutorial" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/tutorials/build-a-node-js-and-react-app-with-npm.adoc - matchpattern: >- - (https.*\`)node:(.*)(\`.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateUsingDockerWithPipelineDocumentation: - name: "Update the value of the node docker image in the 'Using Docker with Pipeline' documentation" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/book/pipeline/docker.adoc - matchpattern: >- - (.*image.*\')node:(.*)(\'.*) - replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} - scmid: default - updateUsingDockerWithPipelineDocumentationDockerExample: - name: "Update the value of the node docker image in the 'Using Docker with Pipeline' documentation" - kind: file - sourceid: nodeLatestVersion - spec: - file: content/doc/book/pipeline/docker.adoc - matchpattern: >- - (FROM )node:(.*)(.*) + (.*docker.*run.*)node:.*( .*) replacepattern: >- ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} scmid: default + actions: default: kind: github/pullrequest scmid: default - title: Bump node alpine docker image version to {{ source "nodeLatestVersion" }} + title: Bump node alpine docker image version to {{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }} spec: labels: - dependencies \ No newline at end of file From 2ca5dfc8ad2576ada55c1a072dbdf72ddcf641b5 Mon Sep 17 00:00:00 2001 From: gounthar Date: Mon, 3 Jul 2023 18:44:03 +0200 Subject: [PATCH 04/13] fix(updatecli): Now includes the trailing part of the regex match --- updatecli/updatecli.d/node.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/updatecli/updatecli.d/node.yaml b/updatecli/updatecli.d/node.yaml index bdf296d5..de1acb81 100644 --- a/updatecli/updatecli.d/node.yaml +++ b/updatecli/updatecli.d/node.yaml @@ -67,7 +67,7 @@ targets: matchpattern: >- (.*docker.*run.*)node:.*( .*) replacepattern: >- - ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${3} + ${1}node:{{ source "nodeLatestVersion" }}-alpine{{ source "alpineLatestVersion" }}${2} scmid: default actions: From 8df6f1293445477e5fbfc47ad94a24b809997f22 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 18:54:54 +0200 Subject: [PATCH 05/13] Delete conventionalCommit.xml --- .idea/conventionalCommit.xml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 .idea/conventionalCommit.xml diff --git a/.idea/conventionalCommit.xml b/.idea/conventionalCommit.xml deleted file mode 100644 index d75a799d..00000000 --- a/.idea/conventionalCommit.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file From ec2b9dce3c697a448d0435a21b9d33319b7e01a9 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 18:55:37 +0200 Subject: [PATCH 06/13] Delete docker-ssh-agent.iml --- .idea/docker-ssh-agent.iml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .idea/docker-ssh-agent.iml diff --git a/.idea/docker-ssh-agent.iml b/.idea/docker-ssh-agent.iml deleted file mode 100644 index 7ac21cdf..00000000 --- a/.idea/docker-ssh-agent.iml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file From c8ecda330cda7f64320d79ba0811c0c3fd9f2acd Mon Sep 17 00:00:00 2001 From: gounthar Date: Mon, 3 Jul 2023 18:57:47 +0200 Subject: [PATCH 07/13] fix(git): Removed .idea --- .idea/misc.xml | 6 - .idea/modules.xml | 8 - .idea/vcs.xml | 15 -- .idea/workspace.xml | 361 -------------------------------------------- 4 files changed, 390 deletions(-) delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .idea/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 639900d1..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 8021f2c4..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index e15fd26f..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index a3f89d45..00000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1652341290737 - - - 1666628190752 - - - 1666684367348 - - - 1666686374790 - - - 1666716910028 - - - 1669038470087 - - - 1669039613762 - - - 1669366229401 - - - 1669366447131 - - - 1669366798883 - - - 1669370236794 - - - 1669371190072 - - - 1669371428783 - - - 1669371586296 - - - 1669372273183 - - - 1669380967801 - - - 1669656902515 - - - 1669657632284 - - - 1669666263759 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From af35eea3cb735b1fd8942665c4763ab21e7571d3 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 18:59:20 +0200 Subject: [PATCH 08/13] Delete setup-sshd --- 11/alpine/setup-sshd | 82 -------------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 11/alpine/setup-sshd diff --git a/11/alpine/setup-sshd b/11/alpine/setup-sshd deleted file mode 100644 index 9e641035..00000000 --- a/11/alpine/setup-sshd +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# The MIT License -# -# Copyright (c) 2015, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage: -# docker run jenkins/ssh-agent -# or -# docker run -e "JENKINS_AGENT_SSH_PUBKEY=" jenkins/ssh-agent - -write_key() { - local ID_GROUP - - # As user, group, uid, gid and JENKINS_AGENT_HOME can be overridden at build, - # we need to find the values for JENKINS_AGENT_HOME - # ID_GROUP contains the user:group of JENKINS_AGENT_HOME directory - ID_GROUP=$(stat -c '%U:%G' "${JENKINS_AGENT_HOME}") - - mkdir -p "${JENKINS_AGENT_HOME}/.ssh" - echo "$1" > "${JENKINS_AGENT_HOME}/.ssh/authorized_keys" - chown -Rf "${ID_GROUP}" "${JENKINS_AGENT_HOME}/.ssh" - chmod 0700 -R "${JENKINS_AGENT_HOME}/.ssh" -} - -if [[ ${JENKINS_AGENT_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_AGENT_SSH_PUBKEY}" -fi -if [[ ${JENKINS_SLAVE_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_SLAVE_SSH_PUBKEY}" -fi - -# ensure variables passed to docker container are also exposed to ssh sessions -env | grep _ >> /etc/environment - -if [[ $# -gt 0 ]]; then - echo "${0##*/} params: $@" - - if [[ $1 == ssh-* ]]; then - echo "Authorizing ssh pubkey found in params." - write_key "$1" - shift 1 - elif [[ "$@" == "/usr/sbin/sshd -D -p 22" ]]; then - # neutralize default jenkins docker-plugin command - # we will run sshd at the end anyway - echo "Ignoring provided sshd command." - - # if unquoted (4 tokens) shift extra 3 - [[ "$2" == "-D" ]] && shift 3 - - shift 1 - else - echo "Executing params: '$@'" - exec "$@" - fi -fi - -# generate host keys if not present -ssh-keygen -A - -# do not detach (-D), log to stderr (-e), passthrough other arguments -exec /usr/sbin/sshd -D -e "${@}" From 681836b9f087f0d93852d507afb98203862d0ae8 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 18:59:51 +0200 Subject: [PATCH 09/13] Delete setup-sshd --- 11/bullseye/setup-sshd | 82 ------------------------------------------ 1 file changed, 82 deletions(-) delete mode 100644 11/bullseye/setup-sshd diff --git a/11/bullseye/setup-sshd b/11/bullseye/setup-sshd deleted file mode 100644 index 9e641035..00000000 --- a/11/bullseye/setup-sshd +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# The MIT License -# -# Copyright (c) 2015, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage: -# docker run jenkins/ssh-agent -# or -# docker run -e "JENKINS_AGENT_SSH_PUBKEY=" jenkins/ssh-agent - -write_key() { - local ID_GROUP - - # As user, group, uid, gid and JENKINS_AGENT_HOME can be overridden at build, - # we need to find the values for JENKINS_AGENT_HOME - # ID_GROUP contains the user:group of JENKINS_AGENT_HOME directory - ID_GROUP=$(stat -c '%U:%G' "${JENKINS_AGENT_HOME}") - - mkdir -p "${JENKINS_AGENT_HOME}/.ssh" - echo "$1" > "${JENKINS_AGENT_HOME}/.ssh/authorized_keys" - chown -Rf "${ID_GROUP}" "${JENKINS_AGENT_HOME}/.ssh" - chmod 0700 -R "${JENKINS_AGENT_HOME}/.ssh" -} - -if [[ ${JENKINS_AGENT_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_AGENT_SSH_PUBKEY}" -fi -if [[ ${JENKINS_SLAVE_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_SLAVE_SSH_PUBKEY}" -fi - -# ensure variables passed to docker container are also exposed to ssh sessions -env | grep _ >> /etc/environment - -if [[ $# -gt 0 ]]; then - echo "${0##*/} params: $@" - - if [[ $1 == ssh-* ]]; then - echo "Authorizing ssh pubkey found in params." - write_key "$1" - shift 1 - elif [[ "$@" == "/usr/sbin/sshd -D -p 22" ]]; then - # neutralize default jenkins docker-plugin command - # we will run sshd at the end anyway - echo "Ignoring provided sshd command." - - # if unquoted (4 tokens) shift extra 3 - [[ "$2" == "-D" ]] && shift 3 - - shift 1 - else - echo "Executing params: '$@'" - exec "$@" - fi -fi - -# generate host keys if not present -ssh-keygen -A - -# do not detach (-D), log to stderr (-e), passthrough other arguments -exec /usr/sbin/sshd -D -e "${@}" From 2068f43165a57e01e377656b092a070d1b7209a2 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 19:00:25 +0200 Subject: [PATCH 10/13] Delete setup-sshd --- 17/alpine/setup-sshd | 82 -------------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 17/alpine/setup-sshd diff --git a/17/alpine/setup-sshd b/17/alpine/setup-sshd deleted file mode 100644 index 9e641035..00000000 --- a/17/alpine/setup-sshd +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# The MIT License -# -# Copyright (c) 2015, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage: -# docker run jenkins/ssh-agent -# or -# docker run -e "JENKINS_AGENT_SSH_PUBKEY=" jenkins/ssh-agent - -write_key() { - local ID_GROUP - - # As user, group, uid, gid and JENKINS_AGENT_HOME can be overridden at build, - # we need to find the values for JENKINS_AGENT_HOME - # ID_GROUP contains the user:group of JENKINS_AGENT_HOME directory - ID_GROUP=$(stat -c '%U:%G' "${JENKINS_AGENT_HOME}") - - mkdir -p "${JENKINS_AGENT_HOME}/.ssh" - echo "$1" > "${JENKINS_AGENT_HOME}/.ssh/authorized_keys" - chown -Rf "${ID_GROUP}" "${JENKINS_AGENT_HOME}/.ssh" - chmod 0700 -R "${JENKINS_AGENT_HOME}/.ssh" -} - -if [[ ${JENKINS_AGENT_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_AGENT_SSH_PUBKEY}" -fi -if [[ ${JENKINS_SLAVE_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_SLAVE_SSH_PUBKEY}" -fi - -# ensure variables passed to docker container are also exposed to ssh sessions -env | grep _ >> /etc/environment - -if [[ $# -gt 0 ]]; then - echo "${0##*/} params: $@" - - if [[ $1 == ssh-* ]]; then - echo "Authorizing ssh pubkey found in params." - write_key "$1" - shift 1 - elif [[ "$@" == "/usr/sbin/sshd -D -p 22" ]]; then - # neutralize default jenkins docker-plugin command - # we will run sshd at the end anyway - echo "Ignoring provided sshd command." - - # if unquoted (4 tokens) shift extra 3 - [[ "$2" == "-D" ]] && shift 3 - - shift 1 - else - echo "Executing params: '$@'" - exec "$@" - fi -fi - -# generate host keys if not present -ssh-keygen -A - -# do not detach (-D), log to stderr (-e), passthrough other arguments -exec /usr/sbin/sshd -D -e "${@}" From 6024e6f3520580c1640bbd31afdb8a72dbe3d935 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 19:01:43 +0200 Subject: [PATCH 11/13] Delete setup-sshd --- 8/alpine/setup-sshd | 82 --------------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 8/alpine/setup-sshd diff --git a/8/alpine/setup-sshd b/8/alpine/setup-sshd deleted file mode 100644 index 9e641035..00000000 --- a/8/alpine/setup-sshd +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# The MIT License -# -# Copyright (c) 2015, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage: -# docker run jenkins/ssh-agent -# or -# docker run -e "JENKINS_AGENT_SSH_PUBKEY=" jenkins/ssh-agent - -write_key() { - local ID_GROUP - - # As user, group, uid, gid and JENKINS_AGENT_HOME can be overridden at build, - # we need to find the values for JENKINS_AGENT_HOME - # ID_GROUP contains the user:group of JENKINS_AGENT_HOME directory - ID_GROUP=$(stat -c '%U:%G' "${JENKINS_AGENT_HOME}") - - mkdir -p "${JENKINS_AGENT_HOME}/.ssh" - echo "$1" > "${JENKINS_AGENT_HOME}/.ssh/authorized_keys" - chown -Rf "${ID_GROUP}" "${JENKINS_AGENT_HOME}/.ssh" - chmod 0700 -R "${JENKINS_AGENT_HOME}/.ssh" -} - -if [[ ${JENKINS_AGENT_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_AGENT_SSH_PUBKEY}" -fi -if [[ ${JENKINS_SLAVE_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_SLAVE_SSH_PUBKEY}" -fi - -# ensure variables passed to docker container are also exposed to ssh sessions -env | grep _ >> /etc/environment - -if [[ $# -gt 0 ]]; then - echo "${0##*/} params: $@" - - if [[ $1 == ssh-* ]]; then - echo "Authorizing ssh pubkey found in params." - write_key "$1" - shift 1 - elif [[ "$@" == "/usr/sbin/sshd -D -p 22" ]]; then - # neutralize default jenkins docker-plugin command - # we will run sshd at the end anyway - echo "Ignoring provided sshd command." - - # if unquoted (4 tokens) shift extra 3 - [[ "$2" == "-D" ]] && shift 3 - - shift 1 - else - echo "Executing params: '$@'" - exec "$@" - fi -fi - -# generate host keys if not present -ssh-keygen -A - -# do not detach (-D), log to stderr (-e), passthrough other arguments -exec /usr/sbin/sshd -D -e "${@}" From 563fbf8318be7ce63806b6acf68cb5a8f30fb74b Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 19:04:49 +0200 Subject: [PATCH 12/13] Delete setup-sshd --- 8/bullseye/setup-sshd | 82 ------------------------------------------- 1 file changed, 82 deletions(-) delete mode 100644 8/bullseye/setup-sshd diff --git a/8/bullseye/setup-sshd b/8/bullseye/setup-sshd deleted file mode 100644 index 9e641035..00000000 --- a/8/bullseye/setup-sshd +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env bash - -set -ex - -# The MIT License -# -# Copyright (c) 2015, CloudBees, Inc. -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - -# Usage: -# docker run jenkins/ssh-agent -# or -# docker run -e "JENKINS_AGENT_SSH_PUBKEY=" jenkins/ssh-agent - -write_key() { - local ID_GROUP - - # As user, group, uid, gid and JENKINS_AGENT_HOME can be overridden at build, - # we need to find the values for JENKINS_AGENT_HOME - # ID_GROUP contains the user:group of JENKINS_AGENT_HOME directory - ID_GROUP=$(stat -c '%U:%G' "${JENKINS_AGENT_HOME}") - - mkdir -p "${JENKINS_AGENT_HOME}/.ssh" - echo "$1" > "${JENKINS_AGENT_HOME}/.ssh/authorized_keys" - chown -Rf "${ID_GROUP}" "${JENKINS_AGENT_HOME}/.ssh" - chmod 0700 -R "${JENKINS_AGENT_HOME}/.ssh" -} - -if [[ ${JENKINS_AGENT_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_AGENT_SSH_PUBKEY}" -fi -if [[ ${JENKINS_SLAVE_SSH_PUBKEY} == ssh-* ]]; then - write_key "${JENKINS_SLAVE_SSH_PUBKEY}" -fi - -# ensure variables passed to docker container are also exposed to ssh sessions -env | grep _ >> /etc/environment - -if [[ $# -gt 0 ]]; then - echo "${0##*/} params: $@" - - if [[ $1 == ssh-* ]]; then - echo "Authorizing ssh pubkey found in params." - write_key "$1" - shift 1 - elif [[ "$@" == "/usr/sbin/sshd -D -p 22" ]]; then - # neutralize default jenkins docker-plugin command - # we will run sshd at the end anyway - echo "Ignoring provided sshd command." - - # if unquoted (4 tokens) shift extra 3 - [[ "$2" == "-D" ]] && shift 3 - - shift 1 - else - echo "Executing params: '$@'" - exec "$@" - fi -fi - -# generate host keys if not present -ssh-keygen -A - -# do not detach (-D), log to stderr (-e), passthrough other arguments -exec /usr/sbin/sshd -D -e "${@}" From 107af560d590172880dc1ca825a249e2fd9ea9b9 Mon Sep 17 00:00:00 2001 From: Bruno Verachten Date: Mon, 3 Jul 2023 19:07:34 +0200 Subject: [PATCH 13/13] Delete private.key --- private.key | Bin 4945 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 private.key diff --git a/private.key b/private.key deleted file mode 100644 index a7c8d565ab7575992ae23e4d7fb52a1fc934db94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4945 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 CgnB0c