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.1.tar.gz (63.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

concoursetools-0.8.1-py3-none-any.whl (51.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: concoursetools-0.8.1.tar.gz
  • Upload date:
  • Size: 63.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for concoursetools-0.8.1.tar.gz
Algorithm Hash digest
SHA256 c4fd328325db61ff5a006ba0cbc4b545a01e52a9972b12542b86a77d193987a6
MD5 d44c457f0483f6ad61efcf8b491f73d8
BLAKE2b-256 47cabd699745797f3b3bcfaab43ab98542279a9ec886069389a7182108a18880

See more details on using hashes here.

File details

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

File metadata

  • Download URL: concoursetools-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 51.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for concoursetools-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5768da9895b65121c6102e4a6523e5d0506d2d0b52147e988ec018093288712d
MD5 522d73206dffadf211d55b07c3111d0f
BLAKE2b-256 594e08c68640003baa484bd2d91c4e9f7986705e720417f22e2f319435fb4c90

See more details on using hashes here.

Supported by

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