-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is the initial contribution to the Open Source Open-Component-Model OCM-Gear project. The following SAP developers contributed to this project until this initial contribution was published as open source: 142 Jonas Brand 115 Philipp Heil 7 Julian Herzog 2 Christian Cwienk 1 Andreas Burger It is derived from the historical, SAP-internal delivery-gear repository at commit dd72a39f65864f48a4829775d926b2a0be63a974
- Loading branch information
0 parents
commit 1f20fb0
Showing
25 changed files
with
6,294 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import dataclasses | ||
import hashlib | ||
import logging | ||
import os | ||
import tarfile | ||
import tempfile | ||
import yaml | ||
|
||
import ccc.oci | ||
import ci.util | ||
import cnudie.util | ||
import gci.componentmodel as cm | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
component_descriptor_base_path = os.path.abspath(ci.util.check_env('BASE_DEFINITION_PATH')) | ||
component_descriptor_path = os.path.abspath(ci.util.check_env('COMPONENT_DESCRIPTOR_PATH')) | ||
component_version = ci.util.check_env('COMPONENT_VERSION') | ||
|
||
own_dir = os.path.abspath(os.path.dirname(__file__)) | ||
repo_dir = os.path.abspath(os.path.join(own_dir, os.pardir)) | ||
|
||
delivery_service_versionfile = os.path.join(repo_dir, 'DELIVERY_SERVICE_VERSION') | ||
delivery_dashboard_versionfile = os.path.join(repo_dir, 'DELIVERY_DASHBOARD_VERSION') | ||
|
||
installation_dir = os.path.join(repo_dir, 'installation') | ||
|
||
|
||
def component_version_from_file(file_path: str): | ||
with open(file_path) as version_file: | ||
version = version_file.read().strip() | ||
return version | ||
|
||
|
||
def parse_component_descriptor(): | ||
component_descriptor = cm.ComponentDescriptor.from_dict( | ||
ci.util.parse_yaml_file(component_descriptor_base_path) | ||
) | ||
return component_descriptor | ||
|
||
|
||
def add_component_ref( | ||
component: cm.Component, | ||
component_ref: cm.ComponentReference, | ||
): | ||
component.componentReferences.append(component_ref) | ||
|
||
|
||
def add_installation_resource( | ||
component: cm.Component, | ||
): | ||
mimetype = 'application/tar+gzip' | ||
|
||
file = tempfile.TemporaryFile() | ||
with tarfile.open(fileobj=file, mode='w:gz') as tar: | ||
tar.add( | ||
name=installation_dir, | ||
arcname=os.path.basename(installation_dir), | ||
) | ||
|
||
hash = hashlib.sha256() | ||
file.seek(0) | ||
while (buf := file.read(4096)): | ||
hash.update(buf) | ||
digest = f'sha256:{hash.hexdigest()}' | ||
octets = file.tell() | ||
file.seek(0) | ||
|
||
target_ref = cnudie.util.target_oci_ref(component=component) | ||
logger.info(f'pushing blob for installation script with {digest=} to {target_ref=}') | ||
|
||
client = ccc.oci.oci_client() | ||
client.put_blob( | ||
image_reference=target_ref, | ||
digest=digest, | ||
octets_count=octets, | ||
data=file, | ||
mimetype=mimetype, | ||
) | ||
|
||
component.resources.append( | ||
cm.Resource( | ||
name='installation', | ||
version=component_version, | ||
type='directoryTree', | ||
access=cm.LocalBlobAccess( | ||
mediaType=mimetype, | ||
localReference=digest, | ||
size=octets, | ||
), | ||
), | ||
) | ||
|
||
|
||
def main(): | ||
delivery_service_version = component_version_from_file(delivery_service_versionfile) | ||
delivery_dashboard_version = component_version_from_file(delivery_dashboard_versionfile) | ||
|
||
component_descriptor = parse_component_descriptor() | ||
component = component_descriptor.component | ||
|
||
add_component_ref( | ||
component=component, | ||
component_ref=cm.ComponentReference( | ||
name='delivery-dashboard', | ||
componentName='ocm.software/delivery-gear/delivery-dashboard', | ||
version=delivery_dashboard_version, | ||
labels=[], | ||
) | ||
) | ||
|
||
add_component_ref( | ||
component=component, | ||
component_ref=cm.ComponentReference( | ||
name='delivery-service', | ||
componentName='ocm.software/delivery-gear/delivery-service', | ||
version=delivery_service_version, | ||
labels=[], | ||
) | ||
) | ||
|
||
add_installation_resource( | ||
component=component, | ||
) | ||
|
||
with open(component_descriptor_path, 'w') as f: | ||
yaml.dump( | ||
data=dataclasses.asdict(component_descriptor), | ||
Dumper=cm.EnumValueYamlDumper, | ||
stream=f, | ||
) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
|
||
# usage: $1: <src-dir> | ||
|
||
src_dir="${1:-"$(readlink -f "$(dirname "${0}")/..")"}" | ||
|
||
echo 'Running flake8 for all python modules..' | ||
error=0 | ||
|
||
files="$src_dir/.ci/*" | ||
excluded_files=".ci/lint,.ci/lint-flake8,.ci/pipeline_definitions" | ||
|
||
export PYTHONPATH="${src_dir}" | ||
|
||
echo 'running pylama for all modules (errors only)' | ||
( | ||
pushd "${src_dir}" | ||
set -x | ||
if pylama -iW,R,C -lpylint "${files}"; then | ||
echo 'pylama succeeded' | ||
else | ||
((error|=1)) | ||
fi | ||
|
||
if "${src_dir}/.ci/lint-flake8"; then | ||
echo 'pyflake8 succeeded' | ||
else | ||
((error|=1)) | ||
fi | ||
|
||
if [ $error -eq 0 ]; then | ||
exit 0 | ||
elif [ $error -gt 0 ]; then | ||
exit 1 | ||
fi | ||
popd | ||
) | ||
|
||
exit $? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
#!/usr/bin/env bash | ||
set -e | ||
|
||
# usage: $1: <src-dir> | ||
|
||
src_dir="${1:-"$(readlink -f "$(dirname "${0}")/..")"}" | ||
|
||
error=0 | ||
|
||
files="$src_dir/.ci/*" | ||
excluded_files=".ci/lint,.ci/lint-flake8,.ci/pipeline_definitions" | ||
|
||
# flake8 / the linter it instruments cannot handle our special type-hints (CliHint) | ||
if flake8 --max-line-length=101 --select=E101,E117,E201,E202,E203,E225,E251,E3,E4,E5,E703,E9,W1,W2,W3,W6,F --count --format=pylint --ignore=F722,F821 --exclude=$excluded_files $files; then | ||
echo "flake8 succeeded" | ||
else | ||
echo "flake8 found errors (see above)" | ||
((error|=1)) | ||
fi | ||
|
||
if [ $error -eq 0 ]; then | ||
exit 0 | ||
elif [ $error -gt 0 ]; then | ||
exit 1 | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
ocm-gear: | ||
base_definition: | ||
traits: | ||
version: ~ | ||
component_descriptor: | ||
component_name: ocm.software/ocm-gear | ||
ocm_repository: europe-docker.pkg.dev/gardener-project/releases | ||
ocm_repository_mappings: | ||
- repository: europe-docker.pkg.dev/gardener-project/releases | ||
prefix: '' | ||
|
||
jobs: | ||
update-dependencies: | ||
traits: | ||
update_component_deps: | ||
merge_policy: auto_merge | ||
merge_method: rebase | ||
cronjob: | ||
interval: 5m | ||
component_descriptor: | ||
ocm_repository: europe-docker.pkg.dev/gardener-project/snapshots | ||
|
||
head-update: | ||
steps: | ||
lint: | ||
execute: lint | ||
traits: | ||
component_descriptor: | ||
ocm_repository: europe-docker.pkg.dev/gardener-project/snapshots | ||
|
||
automatic-release: | ||
steps: | ||
trigger-release: | ||
execute: trigger_release.py | ||
inputs: | ||
component_descriptor_dir: component_descriptor_dir | ||
vars: | ||
RELEASE_JOB_NAME: pipeline.variant("manual-release").job_name() | ||
PIPELINE_NAME: pipeline_descriptor.get("name") | ||
depends: | ||
- component_descriptor | ||
traits: | ||
component_descriptor: | ||
ocm_repository: europe-docker.pkg.dev/gardener-project/snapshots | ||
|
||
manual-release: | ||
steps: | ||
lint: | ||
execute: lint | ||
traits: | ||
version: | ||
preprocess: finalize | ||
inject_effective_version: True | ||
release: | ||
nextversion: bump_minor | ||
release_notes_policy: disabled |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import os | ||
|
||
import ci.util | ||
|
||
|
||
repo_dir = os.path.abspath(ci.util.check_env('MAIN_REPO_DIR')) | ||
dependency_name = ci.util.check_env('DEPENDENCY_NAME') | ||
dependency_version = ci.util.check_env('DEPENDENCY_VERSION') | ||
|
||
delivery_service_versionfile = os.path.join(repo_dir, 'DELIVERY_SERVICE_VERSION') | ||
delivery_dashboard_versionfile = os.path.join(repo_dir, 'DELIVERY_DASHBOARD_VERSION') | ||
|
||
|
||
def write_component_version_to_file(file_path: str): | ||
with open(file_path, 'w') as version_file: | ||
version_file.write(dependency_version.strip()) | ||
|
||
|
||
def main(): | ||
if dependency_name == 'ocm.software/delivery-gear/delivery-service': | ||
write_component_version_to_file(delivery_service_versionfile) | ||
elif dependency_name == 'ocm.software/delivery-gear/delivery-dashboard': | ||
write_component_version_to_file(delivery_dashboard_versionfile) | ||
else: | ||
raise RuntimeError(f"Don't know how to upgrade dependency: {dependency_name}") | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
Oops, something went wrong.