Skip to content

Commit

Permalink
extract GithubActions provider
Browse files Browse the repository at this point in the history
  • Loading branch information
anmarchenko committed Sep 4, 2023
1 parent 852bd81 commit d7ec84d
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 55 deletions.
54 changes: 0 additions & 54 deletions lib/datadog/ci/ext/environment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ module Environment
TAG_CI_ENV_VARS = "_dd.ci.env_vars"

PROVIDERS = [
["GITHUB_SHA", :extract_github_actions],
["GITLAB_CI", :extract_gitlab],
["JENKINS_URL", :extract_jenkins],
["TEAMCITY_VERSION", :extract_teamcity],
Expand Down Expand Up @@ -81,59 +80,6 @@ def filter_sensitive_info(url)
end

# CI providers
def extract_circle_ci(env)
{
Git::TAG_BRANCH => env["CIRCLE_BRANCH"],
Git::TAG_COMMIT_SHA => env["CIRCLE_SHA1"],
Git::TAG_REPOSITORY_URL => env["CIRCLE_REPOSITORY_URL"],
Git::TAG_TAG => env["CIRCLE_TAG"],
TAG_PIPELINE_ID => env["CIRCLE_WORKFLOW_ID"],
TAG_PIPELINE_NAME => env["CIRCLE_PROJECT_REPONAME"],
TAG_PIPELINE_URL => "https://app.circleci.com/pipelines/workflows/#{env["CIRCLE_WORKFLOW_ID"]}",
TAG_JOB_NAME => env["CIRCLE_JOB"],
TAG_JOB_URL => env["CIRCLE_BUILD_URL"],
TAG_PROVIDER_NAME => "circleci",
TAG_WORKSPACE_PATH => env["CIRCLE_WORKING_DIRECTORY"],
Git::TAG_COMMIT_AUTHOR_NAME => env["BUILD_REQUESTEDFORID"],
Git::TAG_COMMIT_AUTHOR_EMAIL => env["BUILD_REQUESTEDFOREMAIL"],
Git::TAG_COMMIT_MESSAGE => env["BUILD_SOURCEVERSIONMESSAGE"],
TAG_CI_ENV_VARS => {
"CIRCLE_WORKFLOW_ID" => env["CIRCLE_WORKFLOW_ID"],
"CIRCLE_BUILD_NUM" => env["CIRCLE_BUILD_NUM"]
}.to_json
}
end

def extract_github_actions(env)
ref = env["GITHUB_HEAD_REF"]
ref = env["GITHUB_REF"] if ref.nil? || ref.empty?
branch, tag = branch_or_tag(ref)

pipeline_url = "#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/actions/runs/#{env["GITHUB_RUN_ID"]}"
pipeline_url = "#{pipeline_url}/attempts/#{env["GITHUB_RUN_ATTEMPT"]}" if env["GITHUB_RUN_ATTEMPT"]

{
Git::TAG_BRANCH => branch,
Git::TAG_COMMIT_SHA => env["GITHUB_SHA"],
Git::TAG_REPOSITORY_URL => "#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}.git",
Git::TAG_TAG => tag,
TAG_JOB_URL => "#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/commit/#{env["GITHUB_SHA"]}/checks",
TAG_JOB_NAME => env["GITHUB_JOB"],
TAG_PIPELINE_ID => env["GITHUB_RUN_ID"],
TAG_PIPELINE_NAME => env["GITHUB_WORKFLOW"],
TAG_PIPELINE_NUMBER => env["GITHUB_RUN_NUMBER"],
TAG_PIPELINE_URL => pipeline_url,
TAG_PROVIDER_NAME => "github",
TAG_WORKSPACE_PATH => env["GITHUB_WORKSPACE"],
TAG_CI_ENV_VARS => {
"GITHUB_SERVER_URL" => env["GITHUB_SERVER_URL"],
"GITHUB_REPOSITORY" => env["GITHUB_REPOSITORY"],
"GITHUB_RUN_ID" => env["GITHUB_RUN_ID"],
"GITHUB_RUN_ATTEMPT" => env["GITHUB_RUN_ATTEMPT"]
}.reject { |_k, v| v.nil? }.to_json
}
end

def extract_gitlab(env)
commit_author_name, commit_author_email = extract_name_email(env["CI_COMMIT_AUTHOR"])

Expand Down
4 changes: 3 additions & 1 deletion lib/datadog/ci/ext/environment/extractor.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,16 @@ class Extractor
require_relative "providers/buddy"
require_relative "providers/buildkite"
require_relative "providers/circleci"
require_relative "providers/github_actions"

PROVIDERS = [
["APPVEYOR", Providers::Appveyor],
["TF_BUILD", Providers::Azure],
["BITBUCKET_COMMIT", Providers::Bitbucket],
["BUDDY", Providers::Buddy],
["BUILDKITE", Providers::Buildkite],
["CIRCLECI", Providers::Circleci]
["CIRCLECI", Providers::Circleci],
["GITHUB_SHA", Providers::GithubActions]
]

def self.for_environment(env)
Expand Down
99 changes: 99 additions & 0 deletions lib/datadog/ci/ext/environment/providers/github_actions.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# frozen_string_literal: true

require_relative "../extractor"

module Datadog
module CI
module Ext
module Environment
module Providers
# Github Actions: https://github.com/features/actions
# Environment variables docs: https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables
class GithubActions < Extractor
private

# overridden methods
def provider_name
"github"
end

def job_name
env["GITHUB_JOB"]
end

def job_url
"#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/commit/#{env["GITHUB_SHA"]}/checks"
end

def pipeline_id
env["GITHUB_RUN_ID"]
end

def pipeline_name
env["GITHUB_WORKFLOW"]
end

def pipeline_number
env["GITHUB_RUN_NUMBER"]
end

def pipeline_url
res = "#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}/actions/runs/#{env["GITHUB_RUN_ID"]}"
res = "#{res}/attempts/#{env["GITHUB_RUN_ATTEMPT"]}" if env["GITHUB_RUN_ATTEMPT"]
res
end

def workspace_path
env["GITHUB_WORKSPACE"]
end

def git_repository_url
"#{env["GITHUB_SERVER_URL"]}/#{env["GITHUB_REPOSITORY"]}.git"
end

def git_commit_sha
env["GITHUB_SHA"]
end

def git_branch
return @branch if defined?(@branch)

set_branch_and_tag
@branch
end

def git_tag
return @tag if defined?(@tag)

set_branch_and_tag
@tag
end

def ci_env_vars
{
"GITHUB_SERVER_URL" => env["GITHUB_SERVER_URL"],
"GITHUB_REPOSITORY" => env["GITHUB_REPOSITORY"],
"GITHUB_RUN_ID" => env["GITHUB_RUN_ID"],
"GITHUB_RUN_ATTEMPT" => env["GITHUB_RUN_ATTEMPT"]
}.reject { |_, v| v.nil? }.to_json
end

# github-specific methods

def ref
return @ref if defined?(@ref)

@ref = env["GITHUB_HEAD_REF"]
@ref = env["GITHUB_REF"] if @ref.nil? || @ref.empty?
@ref
end

def set_branch_and_tag
@branch, @tag = branch_or_tag(ref)
end
end
end
end
end
end
end
44 changes: 44 additions & 0 deletions sig/datadog/ci/ext/environment/providers/github_actions.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
module Datadog
module CI
module Ext
module Environment
module Providers
class GithubActions < Extractor
private
@ref: String

def provider_name: () -> "github"

def job_name: () -> String?

def job_url: () -> ::String

def pipeline_id: () -> String?

def pipeline_name: () -> String?

def pipeline_number: () -> String?

def pipeline_url: () -> String?

def workspace_path: () -> String?

def git_repository_url: () -> ::String

def git_commit_sha: () -> String?

def git_branch: () -> String?

def git_tag: () -> String?

def ci_env_vars: () -> String?

def ref: () -> String

def set_branch_and_tag: () -> [String?, String?]
end
end
end
end
end
end

0 comments on commit d7ec84d

Please sign in to comment.