Skip to main content

Easily create Concourse resource types in Python.

Project description

ConcourseTools logo

version pre-release python coverage pre-commit

A Python package for easily implementing Concourse resource types.

About

Concourse CI is an "open-source continuous thing-doer" designed to enable general automation with intuitive and re-usable components. Resources represent all external inputs and outputs to and from the pipeline, and many of these have been implemented in open source. In order to best leverage the Python ecosystem of open-source packages, Concourse Tools abstracts away the implementation details of Concourse resource types to allow users to focus on writing the code they want to run.

Installation

Install from GitHub, or from PyPI:

$ pip install concoursetools

Usage

Start by familiarising yourself with the Concourse resource "rules" in the documentation. To recreate that example, start by creating a new concourse.py file in your repository. The first step is to create a Version subclass:

from dataclasses import dataclass
from concoursetools import TypedVersion


@dataclass()
class GitVersion(TypedVersion):
    ref: str

Next, create a subclass of ConcourseResource:

from concoursetools import ConcourseResource


class GitResource(ConcourseResource[GitVersion]):

    def __init__(self, uri: str, branch: str, private_key: str) -> None:
        super().__init__(GitVersion)
        self.uri = uri
        self.branch = branch
        self.private_key = private_key

Here, the parameters in the __init__ method will be taken from the source configuration for the resource. Now, implement the three methods required to define the behaviour of the resource:

from pathlib import Path
from typing import Any
from concoursetools import BuildMetadata


class GitResource(ConcourseResource[GitVersion]):
    ...

    def fetch_new_versions(self, previous_version: GitVersion | None) -> list[GitVersion]:
        ...

    def download_version(self, version: GitVersion, destination_dir: pathlib.Path,
                         build_metadata: BuildMetadata, **kwargs: Any) -> tuple[GitVersion, dict[str, str]]:
        ...

    def publish_new_version(self, sources_dir: pathlib.Path, build_metadata: BuildMetadata,
                            **kwargs: Any) -> tuple[GitVersion, dict[str, str]]:
        ...

The keyword arguments in download_version and publish_new_version correspond to params in the get step, and get_params in the put step respectively.

Once you are happy with the resource, generate the Dockerfile using the Concourse Tools CLI:

$ python3 -m concoursetools dockerfile .

Finally, upload the Docker image to a registry, and use it in your pipelines!

For more information - and for more in-depth examples - see the documentation.

Bugs and Contributions

Concourse Tools is in beta, and still under somewhat-active development. Contributions, fixes, suggestions and bug reports are all welcome: Please familiarise yourself with our contribution guidelines.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

concoursetools-0.8.0.tar.gz (62.9 kB view details)

Uploaded Source

Built Distribution

concoursetools-0.8.0-py3-none-any.whl (51.4 kB view details)

Uploaded Python 3

File details

Details for the file concoursetools-0.8.0.tar.gz.

File metadata

  • Download URL: concoursetools-0.8.0.tar.gz
  • Upload date:
  • Size: 62.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.7

File hashes

Hashes for concoursetools-0.8.0.tar.gz
Algorithm Hash digest
SHA256 6778fe55eeb78f869965dac29fe2026389c89d47c433bc2347be68e3b734797b
MD5 81160d3138580dbec8a98fb815e90aee
BLAKE2b-256 d9b529d138a5b2c8c490bd94a95c2c3640276e528959da06beb6e47af4d895d8

See more details on using hashes here.

File details

Details for the file concoursetools-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for concoursetools-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 beb628e44a0bdd2d2f880d5d81ade8804e66962127b6735e87e10d3e45df47a8
MD5 a3c85acc5cc08f2354499955c3314335
BLAKE2b-256 2fbe8d255d1351f2d3a41f56febb70cfe92635f3122fc57ca85e6b7f7c4d3be7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page