Skip to content

Module manubot.process.ci

View Source
import logging

import os

supported_providers = ["github", "travis", "appveyor"]

def get_continuous_integration_parameters():

    """

    Return a dictionary with information on a continuous integration build

    inferred from environment variables.

    The following dictionary keys are set (all values are also strings):

    - provider: name of CI provider, such as "travis" or "appveyor".

    - repo_slug: owner/name of the source code repository, i.e. "manubot/rootstock"

    - repo_owner: owner from repo_slug, i.e. "manubot"

    - repo_name: name from repo_slug, i.e. "rootstock"

    - commit: git commit being evaluated by the CI build

        For pull requests, CI services often build a merge commit

        with the default branch rather than the commit that was

        added to the pull request. In these cases, commit refers

        to this merge commit.

    - triggering_commit: git commit that triggered the CI build.

    - build_url: URL for the webpage with build details

    - job_url: URL for the webpage with job details

    GitHub Actions does not set an environment variable with triggering_commit

    for pull requests. Therefore, set the following environment variable in your workflow:

    ```yaml

    env:

      GITHUB_PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }}

    ```

    """

    if os.getenv("GITHUB_ACTIONS", "false") == "true":

        # https://git.io/JvUf7

        repo_slug = os.environ["GITHUB_REPOSITORY"]

        repo_owner, repo_name = repo_slug.split("/")

        run_id = os.environ["GITHUB_RUN_ID"]

        # GITHUB_SHA for pull_request event: Last merge commit on the GITHUB_REF branch

        # GITHUB_SHA for push event: Commit pushed, unless deleting a branch (when it's the default branch)

        # https://git.io/JvUfd

        github_sha = os.environ["GITHUB_SHA"]

        ci_params = {

            "provider": "github",

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": github_sha,

            "triggering_commit": os.getenv("GITHUB_PULL_REQUEST_SHA") or github_sha,

            "build_url": f"https://github.com/{repo_slug}/commit/{github_sha}/checks",

            "job_url": f"https://github.com/{repo_slug}/actions/runs/{run_id}",

        }

        return ci_params

    if os.getenv("TRAVIS", "false") == "true":

        # https://docs.travis-ci.com/user/environment-variables/

        repo_slug = os.environ["TRAVIS_REPO_SLUG"]

        repo_owner, repo_name = repo_slug.split("/")

        return {

            "provider": "travis",

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": os.environ["TRAVIS_COMMIT"],

            "triggering_commit": os.getenv("TRAVIS_PULL_REQUEST_SHA")

            or os.environ["TRAVIS_COMMIT"],

            "build_url": os.environ["TRAVIS_BUILD_WEB_URL"],

            "job_url": os.environ["TRAVIS_JOB_WEB_URL"],

        }

    if os.getenv("APPVEYOR", "false").lower() == "true":

        # https://www.appveyor.com/docs/environment-variables/

        repo_slug = os.environ["APPVEYOR_REPO_NAME"]

        repo_owner, repo_name = repo_slug.split("/")

        provider_url = "{APPVEYOR_URL}/project/{APPVEYOR_ACCOUNT_NAME}/{APPVEYOR_PROJECT_SLUG}".format(

            **os.environ

        )

        build_url = f"{provider_url}/builds/{os.environ['APPVEYOR_BUILD_ID']}"

        return {

            "provider": "appveyor",

            "provider_account": os.environ["APPVEYOR_ACCOUNT_NAME"],

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": os.environ["APPVEYOR_REPO_COMMIT"],

            "triggering_commit": os.getenv("APPVEYOR_PULL_REQUEST_HEAD_COMMIT")

            or os.environ["APPVEYOR_REPO_COMMIT"],

            "build_url": build_url,

            "job_url": f"{provider_url}/build/job/{os.environ['APPVEYOR_JOB_ID']}",

            "artifact_url": f"{build_url}/artifacts",

        }

    if os.getenv("CI", "false").lower() == "true":

        logging.warning(

            "Detected CI environment variable, but get_continuous_integration_parameters "

            "did not detect environment variables for a supported CI provider. "

            "Supported providers are: {}".format(", ".join(supported_providers))

        )

    return None

Variables

supported_providers

Functions

get_continuous_integration_parameters

def get_continuous_integration_parameters(

)

Return a dictionary with information on a continuous integration build

inferred from environment variables.

The following dictionary keys are set (all values are also strings): - provider: name of CI provider, such as "travis" or "appveyor". - repo_slug: owner/name of the source code repository, i.e. "manubot/rootstock" - repo_owner: owner from repo_slug, i.e. "manubot" - repo_name: name from repo_slug, i.e. "rootstock" - commit: git commit being evaluated by the CI build For pull requests, CI services often build a merge commit with the default branch rather than the commit that was added to the pull request. In these cases, commit refers to this merge commit. - triggering_commit: git commit that triggered the CI build. - build_url: URL for the webpage with build details - job_url: URL for the webpage with job details

GitHub Actions does not set an environment variable with triggering_commit for pull requests. Therefore, set the following environment variable in your workflow:

env:
  GITHUB_PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }}
View Source
def get_continuous_integration_parameters():

    """

    Return a dictionary with information on a continuous integration build

    inferred from environment variables.

    The following dictionary keys are set (all values are also strings):

    - provider: name of CI provider, such as "travis" or "appveyor".

    - repo_slug: owner/name of the source code repository, i.e. "manubot/rootstock"

    - repo_owner: owner from repo_slug, i.e. "manubot"

    - repo_name: name from repo_slug, i.e. "rootstock"

    - commit: git commit being evaluated by the CI build

        For pull requests, CI services often build a merge commit

        with the default branch rather than the commit that was

        added to the pull request. In these cases, commit refers

        to this merge commit.

    - triggering_commit: git commit that triggered the CI build.

    - build_url: URL for the webpage with build details

    - job_url: URL for the webpage with job details

    GitHub Actions does not set an environment variable with triggering_commit

    for pull requests. Therefore, set the following environment variable in your workflow:

    ```yaml

    env:

      GITHUB_PULL_REQUEST_SHA: ${{ github.event.pull_request.head.sha }}

    ```

    """

    if os.getenv("GITHUB_ACTIONS", "false") == "true":

        # https://git.io/JvUf7

        repo_slug = os.environ["GITHUB_REPOSITORY"]

        repo_owner, repo_name = repo_slug.split("/")

        run_id = os.environ["GITHUB_RUN_ID"]

        # GITHUB_SHA for pull_request event: Last merge commit on the GITHUB_REF branch

        # GITHUB_SHA for push event: Commit pushed, unless deleting a branch (when it's the default branch)

        # https://git.io/JvUfd

        github_sha = os.environ["GITHUB_SHA"]

        ci_params = {

            "provider": "github",

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": github_sha,

            "triggering_commit": os.getenv("GITHUB_PULL_REQUEST_SHA") or github_sha,

            "build_url": f"https://github.com/{repo_slug}/commit/{github_sha}/checks",

            "job_url": f"https://github.com/{repo_slug}/actions/runs/{run_id}",

        }

        return ci_params

    if os.getenv("TRAVIS", "false") == "true":

        # https://docs.travis-ci.com/user/environment-variables/

        repo_slug = os.environ["TRAVIS_REPO_SLUG"]

        repo_owner, repo_name = repo_slug.split("/")

        return {

            "provider": "travis",

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": os.environ["TRAVIS_COMMIT"],

            "triggering_commit": os.getenv("TRAVIS_PULL_REQUEST_SHA")

            or os.environ["TRAVIS_COMMIT"],

            "build_url": os.environ["TRAVIS_BUILD_WEB_URL"],

            "job_url": os.environ["TRAVIS_JOB_WEB_URL"],

        }

    if os.getenv("APPVEYOR", "false").lower() == "true":

        # https://www.appveyor.com/docs/environment-variables/

        repo_slug = os.environ["APPVEYOR_REPO_NAME"]

        repo_owner, repo_name = repo_slug.split("/")

        provider_url = "{APPVEYOR_URL}/project/{APPVEYOR_ACCOUNT_NAME}/{APPVEYOR_PROJECT_SLUG}".format(

            **os.environ

        )

        build_url = f"{provider_url}/builds/{os.environ['APPVEYOR_BUILD_ID']}"

        return {

            "provider": "appveyor",

            "provider_account": os.environ["APPVEYOR_ACCOUNT_NAME"],

            "repo_slug": repo_slug,

            "repo_owner": repo_owner,

            "repo_name": repo_name,

            "commit": os.environ["APPVEYOR_REPO_COMMIT"],

            "triggering_commit": os.getenv("APPVEYOR_PULL_REQUEST_HEAD_COMMIT")

            or os.environ["APPVEYOR_REPO_COMMIT"],

            "build_url": build_url,

            "job_url": f"{provider_url}/build/job/{os.environ['APPVEYOR_JOB_ID']}",

            "artifact_url": f"{build_url}/artifacts",

        }

    if os.getenv("CI", "false").lower() == "true":

        logging.warning(

            "Detected CI environment variable, but get_continuous_integration_parameters "

            "did not detect environment variables for a supported CI provider. "

            "Supported providers are: {}".format(", ".join(supported_providers))

        )

    return None