Drone provides many variables that can be referenced in pipelines, see https://docs.drone.io/pipeline/environment/reference/ and https://github.com/drone/runner-go/blob/master/environ/environ.go
Harness CI does not support environment variables outside of shell command execution, so we must convert them to expressions.
Here is an example Drone pipeline:
name: default
type: docker
kind: pipeline
steps:
- name: example
image: busybox
commands:
- echo this is build number $DRONE_BUILD_NUMBER
- name: publish
image: plugins/docker
settings:
repo: gcr.io/example/repo
tag: 1.0.${DRONE_BUILD_NUMBER}
This should convert to this v1 yaml:
options: {}
stages:
- name: default
spec:
clone: {}
runtime:
spec: {}
type: machine
steps:
- name: example
spec:
image: busybox
run: echo this is build number <+pipeline.sequenceId>
- name: publish
spec:
image: plugins/docker
with:
repo: gcr.io/example/repo
tag: 1.0.<+pipeline.sequenceId>
type: plugin
type: ci
Relevant Harness documentation:
We should convert DRONE_ and CI_ variables surrounded by {} and without.
Where possible, we should reference codebase.* values, since they are always available to pipelines with a codebase defined. trigger.* values are not available for manual pipeline executions.
We need to make an effort to support Drone's substitution logic https://docs.drone.io/pipeline/environment/substitution/#string-operations
Drone variables can be escaped, see https://docs.drone.io/pipeline/environment/substitution/#escaping. This conversion should detect these escaped variables as well.
This table shows all DRONE_ variables, the associated deprecated CI_ variable (if applicable) and the equivalent Harness expression (if it is known).
DRONE_ variable |
CI_ variable |
Harness expression |
DRONE_BRANCH |
n/a |
<+codebase.branch> |
DRONE_BUILD_ACTION |
n/a |
? |
DRONE_BUILD_CREATED |
CI_BUILD_CREATED |
? |
DRONE_BUILD_EVENT |
CI_BUILD_EVENT |
? |
DRONE_BUILD_FINISHED |
CI_BUILD_FINISHED |
? |
DRONE_BUILD_LINK |
CI_BUILD_LINK |
? |
DRONE_BUILD_NUMBER |
CI_BUILD_NUMBER |
<+pipeline.sequenceId> |
DRONE_BUILD_PARENT |
n/a |
? |
DRONE_BUILD_STARTED |
CI_BUILD_STARTED |
? |
DRONE_BUILD_STATUS |
CI_BUILD_STATUS |
? |
DRONE_BUILD_TRIGGER |
n/a |
? |
DRONE_CALVER |
n/a |
? |
DRONE_COMMIT |
n/a |
? |
DRONE_COMMIT_AFTER |
n/a |
? |
DRONE_COMMIT_AUTHOR |
CI_COMMIT_AUTHOR |
<+codebase.gitUserId> |
DRONE_COMMIT_AUTHOR_AVATAR |
CI_COMMIT_AUTHOR_AVATAR |
? |
DRONE_COMMIT_AUTHOR_EMAIL |
CI_COMMIT_AUTHOR_EMAIL |
? |
DRONE_COMMIT_AUTHOR_NAME |
CI_COMMIT_AUTHOR_NAME |
? |
DRONE_COMMIT_BEFORE |
n/a |
? |
DRONE_COMMIT_BRANCH |
CI_COMMIT_BRANCH |
<+codebase.branch> |
DRONE_COMMIT_LINK |
n/a |
? |
DRONE_COMMIT_MESSAGE |
CI_COMMIT_MESSAGE |
? |
DRONE_COMMIT_REF |
CI_COMMIT_REF |
? |
DRONE_COMMIT_SHA |
CI_COMMIT_SHA |
<+codebase.commitSha> |
DRONE_DEPLOY_TO |
n/a |
? |
DRONE_FAILED_STAGES |
n/a |
? |
DRONE_FAILED_STEPS |
n/a |
? |
DRONE_GIT_HTTP_URL |
n/a |
? |
DRONE_GIT_SSH_URL |
n/a |
? |
DRONE_PULL_REQUEST |
n/a |
<+codebase.prNumber> |
DRONE_PULL_REQUEST_TITLE |
n/a |
<+codebase.prTitle> |
DRONE_REMOTE_URL |
CI_REMOTE_URL |
<+codebase.repoUrl> |
DRONE_REPO |
CI_REPO |
? |
DRONE_REPO_BRANCH |
n/a |
? |
DRONE_REPO_LINK |
CI_REPO_LINK |
? |
DRONE_REPO_NAME |
CI_REPO_NAME |
<+<+codebase.repoUrl>.substring(<+codebase.repoUrl>.lastIndexOf('/') + 1)>" |
DRONE_REPO_NAMESPACE |
n/a |
? |
DRONE_REPO_OWNER |
n/a |
? |
DRONE_REPO_PRIVATE |
CI_REPO_PRIVATE |
? |
DRONE_REPO_SCM |
n/a |
? |
DRONE_REPO_VISIBILITY |
n/a |
? |
DRONE_SEMVER |
n/a |
? |
DRONE_SEMVER_BUILD |
n/a |
? |
DRONE_SEMVER_ERROR |
n/a |
? |
DRONE_SEMVER_MAJOR |
n/a |
? |
DRONE_SEMVER_MINOR |
n/a |
? |
DRONE_SEMVER_PATCH |
n/a |
? |
DRONE_SEMVER_PRERELEASE |
n/a |
? |
DRONE_SEMVER_SHORT |
n/a |
? |
DRONE_SOURCE_BRANCH |
n/a |
? |
DRONE_STAGE_ARCH |
n/a |
? |
DRONE_STAGE_DEPENDS_ON |
n/a |
? |
DRONE_STAGE_FINISHED |
n/a |
? |
DRONE_STAGE_KIND |
n/a |
? |
DRONE_STAGE_MACHINE |
n/a |
? |
DRONE_STAGE_NAME |
n/a |
? |
DRONE_STAGE_NUMBER |
n/a |
? |
DRONE_STAGE_OS |
n/a |
? |
DRONE_STAGE_STARTED |
n/a |
? |
DRONE_STAGE_STATUS |
n/a |
? |
DRONE_STAGE_TYPE |
n/a |
? |
DRONE_STAGE_VARIANT |
n/a |
? |
DRONE_STEP_NAME |
n/a |
? |
DRONE_STEP_NUMBER |
n/a |
? |
DRONE_SYSTEM_HOST |
n/a |
? |
DRONE_SYSTEM_HOSTNAME |
n/a |
? |
DRONE_SYSTEM_PROTO |
n/a |
? |
DRONE_SYSTEM_VERSION |
n/a |
? |
DRONE_TAG |
n/a |
? |
DRONE_TARGET_BRANCH |
n/a |
? |
DRONE_WORKSPACE |
n/a |
? |
Drone provides many variables that can be referenced in pipelines, see https://docs.drone.io/pipeline/environment/reference/ and https://github.com/drone/runner-go/blob/master/environ/environ.go
Harness CI does not support environment variables outside of shell command execution, so we must convert them to expressions.
Here is an example Drone pipeline:
This should convert to this v1 yaml:
Relevant Harness documentation:
We should convert
DRONE_andCI_variables surrounded by{}and without.Where possible, we should reference
codebase.*values, since they are always available to pipelines with a codebase defined.trigger.*values are not available for manual pipeline executions.We need to make an effort to support Drone's substitution logic https://docs.drone.io/pipeline/environment/substitution/#string-operations
Drone variables can be escaped, see https://docs.drone.io/pipeline/environment/substitution/#escaping. This conversion should detect these escaped variables as well.
This table shows all
DRONE_variables, the associated deprecatedCI_variable (if applicable) and the equivalent Harness expression (if it is known).DRONE_variableCI_variableDRONE_BRANCHn/a<+codebase.branch>DRONE_BUILD_ACTIONn/a?DRONE_BUILD_CREATEDCI_BUILD_CREATED?DRONE_BUILD_EVENTCI_BUILD_EVENT?DRONE_BUILD_FINISHEDCI_BUILD_FINISHED?DRONE_BUILD_LINKCI_BUILD_LINK?DRONE_BUILD_NUMBERCI_BUILD_NUMBER<+pipeline.sequenceId>DRONE_BUILD_PARENTn/a?DRONE_BUILD_STARTEDCI_BUILD_STARTED?DRONE_BUILD_STATUSCI_BUILD_STATUS?DRONE_BUILD_TRIGGERn/a?DRONE_CALVERn/a?DRONE_COMMITn/a?DRONE_COMMIT_AFTERn/a?DRONE_COMMIT_AUTHORCI_COMMIT_AUTHOR<+codebase.gitUserId>DRONE_COMMIT_AUTHOR_AVATARCI_COMMIT_AUTHOR_AVATAR?DRONE_COMMIT_AUTHOR_EMAILCI_COMMIT_AUTHOR_EMAIL?DRONE_COMMIT_AUTHOR_NAMECI_COMMIT_AUTHOR_NAME?DRONE_COMMIT_BEFOREn/a?DRONE_COMMIT_BRANCHCI_COMMIT_BRANCH<+codebase.branch>DRONE_COMMIT_LINKn/a?DRONE_COMMIT_MESSAGECI_COMMIT_MESSAGE?DRONE_COMMIT_REFCI_COMMIT_REF?DRONE_COMMIT_SHACI_COMMIT_SHA<+codebase.commitSha>DRONE_DEPLOY_TOn/a?DRONE_FAILED_STAGESn/a?DRONE_FAILED_STEPSn/a?DRONE_GIT_HTTP_URLn/a?DRONE_GIT_SSH_URLn/a?DRONE_PULL_REQUESTn/a<+codebase.prNumber>DRONE_PULL_REQUEST_TITLEn/a<+codebase.prTitle>DRONE_REMOTE_URLCI_REMOTE_URL<+codebase.repoUrl>DRONE_REPOCI_REPO?DRONE_REPO_BRANCHn/a?DRONE_REPO_LINKCI_REPO_LINK?DRONE_REPO_NAMECI_REPO_NAME<+<+codebase.repoUrl>.substring(<+codebase.repoUrl>.lastIndexOf('/') + 1)>"DRONE_REPO_NAMESPACEn/a?DRONE_REPO_OWNERn/a?DRONE_REPO_PRIVATECI_REPO_PRIVATE?DRONE_REPO_SCMn/a?DRONE_REPO_VISIBILITYn/a?DRONE_SEMVERn/a?DRONE_SEMVER_BUILDn/a?DRONE_SEMVER_ERRORn/a?DRONE_SEMVER_MAJORn/a?DRONE_SEMVER_MINORn/a?DRONE_SEMVER_PATCHn/a?DRONE_SEMVER_PRERELEASEn/a?DRONE_SEMVER_SHORTn/a?DRONE_SOURCE_BRANCHn/a?DRONE_STAGE_ARCHn/a?DRONE_STAGE_DEPENDS_ONn/a?DRONE_STAGE_FINISHEDn/a?DRONE_STAGE_KINDn/a?DRONE_STAGE_MACHINEn/a?DRONE_STAGE_NAMEn/a?DRONE_STAGE_NUMBERn/a?DRONE_STAGE_OSn/a?DRONE_STAGE_STARTEDn/a?DRONE_STAGE_STATUSn/a?DRONE_STAGE_TYPEn/a?DRONE_STAGE_VARIANTn/a?DRONE_STEP_NAMEn/a?DRONE_STEP_NUMBERn/a?DRONE_SYSTEM_HOSTn/a?DRONE_SYSTEM_HOSTNAMEn/a?DRONE_SYSTEM_PROTOn/a?DRONE_SYSTEM_VERSIONn/a?DRONE_TAGn/a?DRONE_TARGET_BRANCHn/a?DRONE_WORKSPACEn/a?