diff --git a/.version b/.version index 5ae69bd..34cde56 100644 --- a/.version +++ b/.version @@ -1 +1 @@ -3.2.5 +3.2.6 diff --git a/update_versions.sh b/CODEOWNERS old mode 100755 new mode 100644 similarity index 87% rename from update_versions.sh rename to CODEOWNERS index 3dee2e2..2696ca6 --- a/update_versions.sh +++ b/CODEOWNERS @@ -1,4 +1,3 @@ -#!/usr/bin/env sh # Copyright 2021 Hewlett Packard Enterprise Development LP # # Permission is hereby granted, free of charge, to any person obtaining a @@ -21,8 +20,7 @@ # # (MIT License) -./install_cms_meta_tools.sh || exit 1 -RC=0 -./cms_meta_tools/update_versions/update_versions.sh || RC=1 -rm -rf ./cms_meta_tools -exit $RC +# Each line is a file pattern followed by one or more owners. +# These owners will be the default owners for everything in +# the repo. +* @Cray-HPE/cray-management-systems \ No newline at end of file diff --git a/Dockerfile.service b/Dockerfile similarity index 97% rename from Dockerfile.service rename to Dockerfile index bb97508..12ad3d6 100644 --- a/Dockerfile.service +++ b/Dockerfile @@ -22,7 +22,7 @@ # (MIT License) # Create 'base' image target -FROM arti.dev.cray.com/baseos-docker-master-local/alpine:3.13.5 as base +FROM artifactory.algol60.net/docker.io/alpine:latest as base WORKDIR /app RUN mkdir -p /var/ims/data VOLUME ["/var/ims/data"] diff --git a/Jenkinsfile.github b/Jenkinsfile.github new file mode 100644 index 0000000..f1071f7 --- /dev/null +++ b/Jenkinsfile.github @@ -0,0 +1,126 @@ +@Library('csm-shared-library') _ + +pipeline { + agent { + label "metal-gcp-builder" + } + + options { + buildDiscarder(logRotator(numToKeepStr: "10")) + timestamps() + } + + environment { + NAME = "cray-ims" + DESCRIPTION = "Cray Management Image Management Service" + IS_STABLE = getBuildIsStable() + DOCKER_NAME = "cms-ims-service" + RPM_NAME = "cray-ims-crayctldeploy-test" + } + + stages { + stage("Clone cms_meta_tools repo") { + steps { + withCredentials([gitUsernamePassword(credentialsId: 'jenkins-algol60-cray-hpe-github-integration')]) { + sh 'git clone --depth 1 --no-single-branch https://github.com/Cray-HPE/cms-meta-tools.git ./cms_meta_tools' + } + } + } + + stage("Set Versions") { + steps { + script { + // Get version from version.py + def ver = sh(returnStdout: true, script: "cat .version").trim() + echo "Base version is ${ver}" + + // Generate docker version string + def dockerver = getDockerBuildVersion(isStable: env.IS_STABLE) + echo "Docker version is ${dockerver}" + + // Write docker version string to .docker_version + writeFile(file: ".docker_version", text: dockerver) + + // Generate chart version string + def chartver = dockerver.replaceAll("_", "+") + echo "Chart version is ${chartver}" + + // Write chart version to .chart_version + writeFile(file: ".chart_version", text: chartver) + } + } + } + + stage("Prepare") { + steps { + sh "make prepare" + } + } + + stage("Build Prep") { + steps { + sh "make build_prep" + } + } + + stage("Lint") { + steps { + sh "make lint" + } + } + + stage("Unittests") { + steps { + sh "make unittests" + } + } + + stage("Build") { + parallel { + stage('Image') { + environment { + DOCKER_VERSION = sh(returnStdout: true, script: "head -1 .docker_version").trim() + DOCKER_ARGS = getDockerBuildArgs(name: env.NAME, description: env.DESCRIPTION, version: env.DOCKER_VERSION) + } + + steps { + sh "make image" + } + } + + stage('Chart') { + environment { + DOCKER_VERSION = sh(returnStdout: true, script: "head -1 .docker_version").trim() + CHART_VERSION = sh(returnStdout: true, script: "head -1 .chart_version").trim() + } + + steps { + updateCsmHelmChartAppVersion(chartPath: "${WORKSPACE}/kubernetes/${NAME}", appVersion: env.DOCKER_VERSION) + sh "make chart" + } + } + + stage('Rpm') { + steps { + sh "make rpm" + } + } + } + } + + stage('Publish ') { + environment { + DOCKER_VERSION = sh(returnStdout: true, script: "head -1 .docker_version").trim() + } + + steps { + script { + publishCsmDockerImage(image: env.DOCKER_NAME, tag: env.DOCKER_VERSION, isStable: env.IS_STABLE) + publishCsmHelmCharts(component: env.NAME, chartsPath: "${WORKSPACE}/kubernetes/.packaged", isStable: env.IS_STABLE) + publishCsmRpms(component: env.RPM_NAME, pattern: "dist/rpmbuild/RPMS/x86_64/*.rpm", arch: "x86_64", isStable: env.IS_STABLE) + publishCsmRpms(component: env.RPM_NAME, pattern: "dist/rpmbuild/SRPMS/*.rpm", arch: "src", isStable: env.IS_STABLE) + } + } + } + } +} diff --git a/Jenkinsfile.service b/Jenkinsfile.service deleted file mode 100644 index f70eb87..0000000 --- a/Jenkinsfile.service +++ /dev/null @@ -1,29 +0,0 @@ - -@Library('dst-shared@master') _ - -dockerBuildPipeline { - app = "ims-service" - name = "cms-ims-service" - description = "Cray Management Image Management Service" - repository = "cray" - imagePrefix = "cray" - dockerfile = "Dockerfile.service" - product = "csm" - enableSonar = true - receiveEvent = ["IMS"] - - githubPushRepo = "Cray-HPE/ims" - /* - By default all branches are pushed to GitHub - - Optionally, to limit which branches are pushed, add a githubPushBranches regex variable - Examples: - githubPushBranches = /master/ # Only push the master branch - - In this case, we push bugfix, feature, hot fix, master, and release branches - - NOTE: If this Jenkinsfile is removed, the a Jenkinsfile.github file must be created - to do this push. See the cray-product-install-charts repo for an example. - */ - githubPushBranches = /(bugfix\/.*|feature\/.*|hotfix\/.*|master|release\/.*)/ -} diff --git a/Jenkinsfile.sles15ncn-craytest b/Jenkinsfile.sles15ncn-craytest deleted file mode 100644 index aa4d2c1..0000000 --- a/Jenkinsfile.sles15ncn-craytest +++ /dev/null @@ -1,9 +0,0 @@ -@Library('dst-shared') _ -rpmBuild( - specfile: "cray-ims-crayctldeploy-test.spec", - product: "ct-tests", - target_node: "ncn", - channel: "casmcms-builds", - fanout_params: ["sle15sp1"], - recv_triggers: ["cme-premium-cf"] -) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cf15804 --- /dev/null +++ b/Makefile @@ -0,0 +1,80 @@ +# Copyright 2019-2021 Hewlett Packard Enterprise Development LP +# +# 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. +# +# (MIT License) + +NAME ?= cray-ims +DOCKER_NAME ?= cray-ims-service +CHART_PATH ?= kubernetes +DOCKER_VERSION ?= $(shell head -1 .docker_version) +CHART_VERSION ?= $(shell head -1 .chart_version) + +HELM_UNITTEST_IMAGE ?= quintush/helm-unittest:3.3.0-0.2.5 + +SPEC_NAME ?= cray-ims-crayctldeploy-test +RPM_NAME ?= cray-ims-crayctldeploy-test +SPEC_FILE ?= ${SPEC_NAME}.spec +SPEC_VERSION ?= $(shell head -1 .version) +BUILD_METADATA ?= "1~development~$(shell git rev-parse --short HEAD)" +SOURCE_NAME ?= ${RPM_NAME}-${SPEC_VERSION} +BUILD_DIR ?= $(PWD)/dist/rpmbuild +SOURCE_PATH := ${BUILD_DIR}/SOURCES/${SOURCE_NAME}.tar.bz2 + +all : prepare build_prep lint unittests image chart rpm +chart: chart_setup chart_package +rpm: rpm_package_source rpm_build_source rpm_build + +prepare: + rm -rf $(BUILD_DIR) + mkdir -p $(BUILD_DIR)/SPECS $(BUILD_DIR)/SOURCES + cp $(SPEC_FILE) $(BUILD_DIR)/SPECS/ + +build_prep: + ./cms_meta_tools/scripts/runBuildPrep.sh + +image: + docker build --pull ${DOCKER_ARGS} --tag '${DOCKER_NAME}:${DOCKER_VERSION}' . + +lint: + ./cms_meta_tools/scripts/runLint.sh + +unittests: + ( DOCKER_NAME=${DOCKER_NAME} VERSION=${DOCKER_VERSION} ./runUnitTests.sh ) + +chart_setup: + mkdir -p ${CHART_PATH}/.packaged + printf "\nglobal:\n appVersion: ${CHART_VERSION}" >> ${CHART_PATH}/${NAME}/values.yaml + +chart_package: + helm dep up ${CHART_PATH}/${NAME} + helm package ${CHART_PATH}/${NAME} -d ${CHART_PATH}/.packaged --app-version ${DOCKER_VERSION} --version ${CHART_VERSION} + +chart_test: + helm lint "${CHART_PATH}/${NAME}" + docker run --rm -v ${PWD}/${CHART_PATH}:/apps ${HELM_UNITTEST_IMAGE} -3 ${NAME} + +rpm_package_source: + tar --transform 'flags=r;s,^,/$(SOURCE_NAME)/,' --exclude .git --exclude dist --exclude ./cms_meta_tools -cvjf $(SOURCE_PATH) . + +rpm_build_source: + BUILD_METADATA=$(BUILD_METADATA) rpmbuild -ts $(SOURCE_PATH) --define "_topdir $(BUILD_DIR)" + +rpm_build: + BUILD_METADATA=$(BUILD_METADATA) rpmbuild -ba $(SPEC_FILE) --define "_topdir $(BUILD_DIR)" diff --git a/README.md b/README.md index c85d748..b1c9b9a 100644 --- a/README.md +++ b/README.md @@ -165,7 +165,7 @@ The following are required: ## Building ``` -$ docker build -t ims-service:dev -f Dockerfile.service . +$ docker build -t ims-service:dev . ``` ## Running Locally diff --git a/cray-ims-crayctldeploy-test.spec b/cray-ims-crayctldeploy-test.spec index b419643..fbf338e 100644 --- a/cray-ims-crayctldeploy-test.spec +++ b/cray-ims-crayctldeploy-test.spec @@ -86,5 +86,3 @@ rmdir %{buildroot}%{imslib} %attr(644, root, root) %{imslib}/ims_test_ims_helpers.py %attr(644, root, root) %{imslib}/ims_test_k8s_helpers.py %attr(644, root, root) %{imslib}/ims_test_logger.py - -%changelog diff --git a/kubernetes/cray-ims/values.yaml b/kubernetes/cray-ims/values.yaml index e706e96..bb3ecb5 100644 --- a/kubernetes/cray-ims/values.yaml +++ b/kubernetes/cray-ims/values.yaml @@ -22,17 +22,17 @@ ims_config: # {cray_ims_utils_image_org}/{cray_ims_utils_image_name}:{cray_ims_utils_image_version} cray_ims_utils_image_org: "cray" cray_ims_utils_image_name: "cray-ims-utils" - cray_ims_utils_image_version: "latest" + cray_ims_utils_image_version: "IMS_UTILS_VERSION" # {cray_ims_kiwi_ng_opensuse_x86_64_builder_image_org}/{`cray_ims_kiwi_ng_opensuse_x86_64_builder_image_name`}:{cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version} cray_ims_kiwi_ng_opensuse_x86_64_builder_image_org: "cray" cray_ims_kiwi_ng_opensuse_x86_64_builder_image_name: "cray-ims-kiwi-ng-opensuse-x86_64-builder" - cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version: "latest" + cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version: "IMS_KIWI_NG_VERSION" # {cray_ims_sshd_image_org}/{cray_ims_sshd_image_name}:{cray_ims_sshd_image_version} cray_ims_sshd_image_org: "cray" cray_ims_sshd_image_name: "cray-ims-sshd" - cray_ims_sshd_image_version: "latest" + cray_ims_sshd_image_version: "IMS_SSHD_VERSION" api_gw: api_gw_service_name: "istio-ingressgateway" diff --git a/runBuildPrep.sh b/runBuildPrep.sh deleted file mode 100755 index 230a09e..0000000 --- a/runBuildPrep.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/bash -# Copyright 2020-2021 Hewlett Packard Enterprise Development LP -# -# 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. -# -# (MIT License) - -set -x -o pipefail - -get_container_versions_on_branch() { - local BRANCH=$1 - if wget "https://arti.dev.cray.com/artifactory/csm-misc-${BRANCH}-local/manifest/manifest.txt"; then - echo "Contents of manifest.txt" - echo "====" - cat manifest.txt - echo "====" - - IMS_UTILS_VERSION=$(grep cray-ims-utils manifest.txt | sed s/.*://g | tr -d '[:space:]') - IMS_KIWI_NG_VERSION=$(grep cray-ims-kiwi-ng-opensuse-x86_64-builder manifest.txt | sed s/.*://g | tr -d '[:space:]') - IMS_SSHD_VERSION=$(grep cray-ims-sshd manifest.txt | sed s/.*://g | tr -d '[:space:]') - rm manifest.txt - - if [[ -n $IMS_UTILS_VERSION && -n $IMS_SSHD_VERSION && -n $IMS_KIWI_NG_VERSION ]]; then - return 0 - fi - - echo "ERROR: Missing one or more expected versions in the manifest file" - echo "IMS_UTILS_VERSION=\"$IMS_UTILS_VERSION\"" - echo "IMS_KIWI_NG_VERSION=\"$IMS_KIWI_NG_VERSION\"" - echo "IMS_SSHD_VERSION=\"$IMS_SSHD_VERSION\"" - else - echo "ERROR: Could not wget manifest file." - fi - return 1 -} - -get_container_versions() { - if [[ $GIT_BRANCH =~ release\/.* ]]; then - echo "Release Branch" - if ! get_container_versions_on_branch "stable"; then - return 1 - fi - else - echo "non-Release Branch" - if ! get_container_versions_on_branch "master"; then - return 1 - fi - fi - return 0 -} - -pin_dependent_containers() { - if get_container_versions; then - if ! sed -i "s/cray_ims_utils_image_version:.*/cray_ims_utils_image_version: \"${IMS_UTILS_VERSION}\"/g" kubernetes/cray-ims/values.yaml; then - echo "ERROR: sed returned failure trying to pin cray_ims_utils_image_version" - return 1 - fi - if ! sed -i "s/cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version:.*/cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version: \"${IMS_KIWI_NG_VERSION}\"/g" kubernetes/cray-ims/values.yaml; then - echo "ERROR: sed returned failure trying to pin cray_ims_kiwi_ng_opensuse_x86_64_builder_image_version" - return 1 - fi - if ! sed -i "s/cray_ims_sshd_image_version:.*/cray_ims_sshd_image_version: \"${IMS_SSHD_VERSION}\"/g" kubernetes/cray-ims/values.yaml; then - echo "ERROR: sed returned failure trying to pin cray_ims_sshd_image_version" - return 1 - fi - - echo "Contents of values.yaml" - echo "====" - cat kubernetes/cray-ims/values.yaml - echo "====" - - return 0 - fi - return 1 -} - -# Update the version strings from the placeholder value -if ! ./update_versions.sh ; then - echo "ERROR: Failed updating version placeholder strings" - exit 1 -fi - -if ! pin_dependent_containers; then - echo "ERROR: Failed to pin dependent container versions." - exit 1 -fi -exit 0 diff --git a/runLint.sh b/runLint.sh deleted file mode 100755 index a1f8d78..0000000 --- a/runLint.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env sh - -# Copyright 2020-2021 Hewlett Packard Enterprise Development LP -# -# 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. -# -# (MIT License) - -./install_cms_meta_tools.sh || exit 1 -RC=0 -./cms_meta_tools/copyright_license_check/copyright_license_check.sh || RC=1 -./cms_meta_tools/go_lint/go_lint.sh || RC=1 -rm -rf ./cms_meta_tools -exit $RC \ No newline at end of file diff --git a/runUnitTests.sh b/runUnitTests.sh index 4a04240..756e2c4 100755 --- a/runUnitTests.sh +++ b/runUnitTests.sh @@ -21,6 +21,5 @@ # # (MIT License) -docker rmi -f ims-service-unittests:latest -docker build --target testing -t ims-service-unittests -f Dockerfile.service . -docker run --rm ims-service-unittests:latest +docker build --target testing -t ${DOCKER_NAME}-unittests:${VERSION} . +docker run --rm ${DOCKER_NAME}-unittests:${VERSION} diff --git a/update_external_versions.conf b/update_external_versions.conf new file mode 100644 index 0000000..4da89f2 --- /dev/null +++ b/update_external_versions.conf @@ -0,0 +1,11 @@ +image: cray-ims-utils + major: 2 + minor: 5 + +image: cray-ims-kiwi-ng-opensuse-x86_64-builder + major: 0 + minor: 5 + +image: cray-ims-sshd + major: 1 + minor: 2 diff --git a/update_versions.conf b/update_versions.conf index 5eec9aa..b8a2469 100644 --- a/update_versions.conf +++ b/update_versions.conf @@ -17,3 +17,15 @@ targetfile: kubernetes/cray-ims/Chart.yaml targetfile: api/openapi.yaml + +sourcefile: cray-ims-utils.version +tag: IMS_UTILS_VERSION +targetfile: kubernetes/cray-ims/values.yaml + +sourcefile: cray-ims-kiwi-ng-opensuse-x86_64-builder.version +tag: IMS_KIWI_NG_VERSION +targetfile: kubernetes/cray-ims/values.yaml + +sourcefile: cray-ims-sshd.version +tag: IMS_SSHD_VERSION +targetfile: kubernetes/cray-ims/values.yaml