
    uYfU                        d Z ddlZddlZddlZddlZddlZddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ ddlmZ d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ! ejD                  d      Z# ee$      Z%d Z&d Z'd<dZ(d  Z)d! Z*d" Z+d# Z,d$ Z-d% Z.d& Z/d' Z0d( Z1d) Z2d* Z3d+ Z4d, Z5d- Z6d.e)fd/e*fd0e+fd1e,fd2e-fd3e.fd4e/fd5e0fd6e1fd7e2fd8e3fd9e4fd:e5fd;e6ffZ7y)=z
Tags for common CI attributes
    N)Dict)List)MutableMapping)Optional)git)
get_loggerz
ciapp-testzci.stage.namezci.job.namez
ci.job.urlzci.pipeline.idzci.pipeline.namezci.pipeline.numberzci.pipeline.urlzci.provider.namezci.node.namezci.node.labelszci.workspace_pathzos.architecturezos.platformz
os.versionzruntime.namezruntime.versionlibrary_versionz_dd.ci.env_varsz(https?://|ssh://)[^/]*@c                 6    | t         j                  d|       S d S )Nz\1)_RE_URLsub)urls    N/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/ddtrace/ext/ci.py_filter_sensitive_infor   Q   s    &)o7;;uc"?4?    c                      t         t        j                         t        t        j                         t
        t        j                         t        t        j                         t        t        j                         iS )z;Extract configuration facet tags for OS and Python runtime.)OS_ARCHITECTUREplatformmachineOS_PLATFORMsystem
OS_VERSIONreleaseRUNTIME_NAMEpython_implementationRUNTIME_VERSIONpython_version r   r   _get_runtime_and_os_metadatar   V   sR     	))+X__&H$$&h446002 r   c           	      l   | t         j                  n| } i }t        D ]  \  }}|| v s ||       } n t        j                  |      }	 t        j
                  |      |t        <   |j                  |j!                         D 	
ci c]  \  }	}
|j#                  |	      r|	|
 c}
}	       t        j$                  |       }|j                  |j!                         D 	
ci c]  \  }	}
|
s	|	|
 c}
}	       t        j&                  |j#                  t        j(                              r|j#                  t        j*                        sDt        j,                  |j#                  t        j(                              |t        j*                  <   nCt        j,                  |j#                  t        j*                              |t        j*                  <   |t        j(                  = nt        j,                  |j#                  t        j(                              |t        j(                  <   t        j,                  |j#                  t        j*                              |t        j*                  <   t/        |j#                  t        j0                              |t        j0                  <   |j#                  t              }|r&t         j2                  j5                  |      |t        <   |j                  t7                      |j!                         D 	
ci c]  \  }	}
|
	|	|
 c}
}	S # t        j                  $ r t        j                  d       Y t        $ rQ}t        j                  t        j                        }t        |      }t        j                  d||       Y d}~5d}~ww xY wc c}
}	w c c}
}	w c c}
}	w )zDExtract and set tags from provider environ, as well as git metadata.N)cwdz6Git executable not found, cannot extract git metadata.z!Error extracting git metadata: %s)exc_info)osenviron	PROVIDERSr   extract_git_metadataextract_workspace_pathWORKSPACE_PATHGitNotFoundErrorlogerror
ValueErrorisEnabledForloggingDEBUGstrupdateitemsgetextract_user_git_metadatais_ref_a_tagBRANCHTAGnormalize_refr   REPOSITORY_URLpath
expanduserr   )envr    tagskeyextractgit_infoe
debug_modestderrkvuser_specified_git_infoworkspace_paths                r   r<   r<   a   s    "**CD! W#:3<D
 ''C0HT#&#=#=##F  	KK(.."2F$!Q$((1+AFG!;;C@ 	KK"9"?"?"AG$!QQAGH ,-xx --dhhszz.BCDM--dhhsww.?@DM,,TXXcjj-ABSZZ))$((377*;<SWW5dhhs?Q?Q6RSD		XXn-N!ww11.A^KK,./!ZZ\;TQQ]AqD;;G  L		JK T%%gmm4
Q		5v
	SST G
 H* <sC   
L N$
N$

N*
*N*
	
N0N0(N!N!ANN!c                    dj                  | j                  d      | j                  d            }| j                  d      dk(  rgdj                  | j                  d            }| j                  d      }| j                  d      xs | j                  d	      }| j                  d
      }ndx}x}x}}| j                  d      }|r| j                  d      }|r|d|z   z  }t        dt        j                  |t        j
                  |t        | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        |t        |t        j                  |t        j                  |t        j                  |t        j                  | j                  d      t        j                   | j                  d      iS )z&Extract CI tags from Appveyor environ.z.https://ci.appveyor.com/project/{0}/builds/{1}APPVEYOR_REPO_NAMEAPPVEYOR_BUILD_IDAPPVEYOR_REPO_PROVIDERgithubhttps://github.com/{0}.gitAPPVEYOR_REPO_COMMIT&APPVEYOR_PULL_REQUEST_HEAD_REPO_BRANCHAPPVEYOR_REPO_BRANCHAPPVEYOR_REPO_TAG_NAMENAPPVEYOR_REPO_COMMIT_MESSAGE%APPVEYOR_REPO_COMMIT_MESSAGE_EXTENDED
appveyorAPPVEYOR_BUILD_FOLDERAPPVEYOR_BUILD_NUMBERAPPVEYOR_REPO_COMMIT_AUTHOR!APPVEYOR_REPO_COMMIT_AUTHOR_EMAIL)formatr2   PROVIDER_NAMEr   r8   
COMMIT_SHAr'   PIPELINE_IDPIPELINE_NAMEPIPELINE_NUMBERPIPELINE_URLJOB_URLr5   r6   COMMIT_MESSAGECOMMIT_AUTHOR_NAMECOMMIT_AUTHOR_EMAIL)r;   r   
repositorycommitbranchtagcommit_messageextendeds           r   extract_appveyorrj      s    ;
A
A$%sww/B'CC ww'(H4188AU9VW
/0AB 
cgg"G
 gg./-11
1V1fsWW;<N77BCdXo-N 	zJ 78SWW01sww34!89c

FN(E F)L!M r   c           	      D   | j                  d      r| j                  d      r| j                  d      rvdj                  | j                  d      | j                  d      | j                  d            }|}|dj                  | j                  d      | j                  d            z   }ndx}}i t        d	t        | j                  d
      t        | j                  d      t
        | j                  d      t        | j                  d      t        |t        |t        j                  | j                  d      xs | j                  d      t        j                  | j                  d      xs | j                  d      t        j                  | j                  d      xs$ | j                  d      xs | j                  d      t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d      t         | j                  d      t"        | j                  d      t$        t'        j(                  | j                  d      | j                  d      | j                  d      dd      S )z-Extract CI tags from Azure pipelines environ.SYSTEM_TEAMFOUNDATIONSERVERURISYSTEM_TEAMPROJECTIDBUILD_BUILDIDz!{0}{1}/_build/results?buildId={2}z&view=logs&j={0}&t={1}SYSTEM_JOBIDSYSTEM_TASKINSTANCEIDNazurepipelinesBUILD_SOURCESDIRECTORYBUILD_DEFINITIONNAME&SYSTEM_PULLREQUEST_SOURCEREPOSITORYURIBUILD_REPOSITORY_URI!SYSTEM_PULLREQUEST_SOURCECOMMITIDBUILD_SOURCEVERSIONSYSTEM_PULLREQUEST_SOURCEBRANCHBUILD_SOURCEBRANCHBUILD_SOURCEBRANCHNAMEBUILD_SOURCEVERSIONMESSAGEBUILD_REQUESTEDFORIDBUILD_REQUESTEDFOREMAILSYSTEM_STAGEDISPLAYNAMESYSTEM_JOBDISPLAYNAME)rm   rn   ro   ,:
separators)r2   rY   rZ   r'   r\   r]   r^   r_   r`   r   r8   r[   r5   ra   rb   rc   
STAGE_NAMEJOB_NAME_CI_ENV_VARSjsondumps)r;   base_urlpipeline_urljob_urls       r   extract_azure_pipelinesr      s    ww/0SWW=S5TY\Y`Y`apYq6==GG45sww?U7VX[X_X_`oXp
  5<<GGN#SWW-D%E
 
 "&%w' 89 	SWW_- 	sww56	
 	1 	l 	 	CGG$LMpQTQXQXYoQp 	 CDfPeHf 	

CGG=> -77'(-77+, 	CGG$@A 	(> ? 	)B!C  	CGG56!" 	#''12#$ 	djj(+0F(G!$!9 # 7
 "
% r   c                 x   dj                  | j                  d      | j                  d            }t        j                  | j                  d      t        j                  | j                  d      t        j
                  | j                  d      xs | j                  d      t        j                  | j                  d      t        |t        | j                  d	d
      j                  d      xs dt        | j                  d      t        | j                  d      t        |t        dt        | j                  d      iS )z'Extract CI tags from Bitbucket environ.z<https://bitbucket.org/{0}/addon/pipelines/home#!/results/{1}BITBUCKET_REPO_FULL_NAMEBITBUCKET_BUILD_NUMBERBITBUCKET_BRANCHBITBUCKET_COMMITBITBUCKET_GIT_SSH_ORIGINBITBUCKET_GIT_HTTP_ORIGINBITBUCKET_TAGBITBUCKET_PIPELINE_UUID z{}}N	bitbucketBITBUCKET_CLONE_DIR)rY   r2   r   r5   r[   r8   r6   r`   r\   stripr]   r^   r_   rZ   r'   )r;   r   s     r   extract_bitbucketr      s     I
O
O*+SWW5M-NC 	

CGG./ 23CGG$>?g377KfCg)SWW6;AA%HPDsww9:!9:c{ 56 r   c                 V   g }d}| D ]f  }|j                  |      s|j                  |d      j                         }| j                  |      }|j	                  dj                  ||             h i t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d      t        | j                  d      t        | j                  d	      t        | j                  d
      t        | j                  d      t        dj                  | j                  d      | j                  d            t         dt"        | j                  d      t        j$                  | j                  d      t        j&                  | j                  d      t        j(                  | j                  d      t        j*                  | j                  d      t        j,                  | j                  d      t.        t1        j2                  | j                  d      | j                  d      dd      t4        t1        j2                  |d      t6        | j                  d      iS )z'Extract CI tags from Buildkite environ.BUILDKITE_AGENT_META_DATA_r   z{}:{}BUILDKITE_BRANCHBUILDKITE_COMMITBUILDKITE_REPOBUILDKITE_TAGBUILDKITE_BUILD_IDBUILDKITE_PIPELINE_SLUGBUILDKITE_BUILD_NUMBERBUILDKITE_BUILD_URLz{0}#{1}BUILDKITE_JOB_ID	buildkiteBUILDKITE_BUILD_CHECKOUT_PATHBUILDKITE_MESSAGEBUILDKITE_BUILD_AUTHORBUILDKITE_BUILD_AUTHOR_EMAILBUILDKITE_BUILD_CREATORBUILDKITE_BUILD_CREATOR_EMAIL)r   r   r   r   BUILDKITE_AGENT_ID)
startswithreplacelowerr2   appendrY   r   r5   r[   r8   r6   r\   r]   r^   r_   r`   rZ   r'   ra   rb   rc   COMMIT_COMMITTER_NAMECOMMIT_COMMITTER_EMAILr   r   r   NODE_LABELS	NODE_NAME)r;   node_label_list buildkite_agent_meta_data_prefixenv_variabler=   values         r   extract_buildkiter      sq    O'C$ ?""#CD&&'GLRRTCGGL)E""7>>#u#=>	?


CGG./ 23 	CGG$45 	)	
 	SWW12 	sww89 	!9: 	cgg34 	!!#''*?"@#''J\B]^ 	{ 	 ?@ 	CGG$78 	(@ A 	)G!H 	!!377+D#E  	""CGG,K$L!" 	djj&)gg.B&C$'GG,>$? "
#0 	TZZJG377/03 r   c                    t         j                  | j                  d      t         j                  | j                  d      t         j                  | j                  d      t         j
                  | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        dj                  | j                  d            t        | j                  d	      t        | j                  d
      t        dt        | j                  d      t        t!        j"                  | j                  d      | j                  d      dd      iS )z&Extract CI tags from CircleCI environ.CIRCLE_BRANCHCIRCLE_SHA1CIRCLE_REPOSITORY_URL
CIRCLE_TAGCIRCLE_WORKFLOW_IDCIRCLE_PROJECT_REPONAMECIRCLE_BUILD_NUMz0https://app.circleci.com/pipelines/workflows/{0}CIRCLE_BUILD_URL
CIRCLE_JOBcircleciCIRCLE_WORKING_DIRECTORY)r   r   r   r   )r   r5   r2   r[   r8   r6   r\   r]   r^   r_   rY   r`   r   rZ   r'   r   r   r   r;   s    r   extract_circle_cir   $  s    	

CGGO,.CGG$;<&SWW12sww89!34HOOPSPWPWXlPmn+,#'','z :;djj&)gg.B&C$'GG,>$? "
 r   c                 6   | j                  d      }t        j                  | j                  d      t        |t        | j                  d      t
        | j                  d      t        | j                  d      t        dt        t        j                  d|id      iS )	z'Extract CI tags from Codefresh environ.CF_BUILD_ID	CF_BRANCHCF_PIPELINE_NAMECF_BUILD_URLCF_STEP_NAME	codefreshr   r   )r2   r   r5   r\   r]   r_   r   rZ   r   r   r   )r;   build_ids     r   extract_codefreshr   >  s|     ww}%H

CGGK(Xsww12cggn-#''.){djjH%!
 r   c                    t        | j                  d            }| j                  d      }| j                  d      }| j                  d      }| j                  d      }dj                  |||      }|||d}|r||d<   dj                  ||      }t        j                  | j                  d	      xs | j                  d
      t        j
                  |t        j                  dj                  ||      t        dj                  |||      t        |t        | j                  d      t        | j                  d      t        |t        | j                  d      t        dt        | j                  d      t        t!        j"                  |d      iS )z$Extract CI tags from Github environ.GITHUB_SERVER_URLGITHUB_REPOSITORY
GITHUB_SHAGITHUB_RUN_IDGITHUB_RUN_ATTEMPTz{0}/{1}/actions/runs/{2})r   r   r   z{0}/attempts/{1}GITHUB_HEAD_REF
GITHUB_REFz{0}/{1}.gitz{0}/{1}/commit/{2}/checksGITHUB_WORKFLOWGITHUB_RUN_NUMBER
GITHUB_JOBrK   GITHUB_WORKSPACEr   r   )r   r2   rY   r   r5   r[   r8   r`   r\   r]   r^   r_   r   rZ   r'   r   r   r   )r;   github_server_urlgithub_repositorygit_commit_shagithub_run_idrun_attemptr   env_varss           r   extract_github_actionsr   P  sc    /sww7J/KL 34WW\*NGGO,M''./K-44L /.&H
 )4%&)00{K 	

CGG-.G#'',2GM001BDUV,334EGXZhi]sww01!45l#'','x 23djjjA r   c           	         | j                  d      }d}d}|r#|j                  d      j                  d      \  }}| j                  d      }i t        j                  | j                  d      t        j
                  | j                  d      t        j                  | j                  d      t        j                  | j                  d	      t        | j                  d
      t        | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        dt         | j                  d      t        j"                  | j                  d      t        j$                  |t        j&                  |t        j(                  |t*        t-        j.                  | j                  d      | j                  d      | j                  d      dd      t0        | j                  d      t2        | j                  d      iS )z$Extract CI tags from Gitlab environ.CI_COMMIT_AUTHORNz> z <CI_COMMIT_TIMESTAMPCI_COMMIT_REF_NAMECI_COMMIT_SHACI_REPOSITORY_URLCI_COMMIT_TAGCI_JOB_STAGECI_JOB_NAME
CI_JOB_URLCI_PIPELINE_IDCI_PROJECT_PATHCI_PIPELINE_IIDCI_PIPELINE_URLgitlabCI_PROJECT_DIRCI_COMMIT_MESSAGECI_PROJECT_URL	CI_JOB_ID)r   r   r   r   r   CI_RUNNER_TAGSCI_RUNNER_ID)r2   r   splitr   r5   r[   r8   r6   r   r   r`   r\   r]   r^   r_   rZ   r'   ra   rb   rc   COMMIT_AUTHOR_DATEr   r   r   r   r   )r;   authorauthor_nameauthor_emailcommit_timestamps        r   extract_gitlabr  y  s,    WW'(FKL$*LL$6$<$<T$B!\ww45

CGG010 	CGG$78 	)	
 	CGGN+ 	#''-( 	& 	SWW-. 	sww01 	!23 	cgg/0 	x 	 01 	CGG$78 	  	!" 	 0#$ 	djj"%''*:";"%''*:"; WW[1
 "
 	SWW-.377>*7 r   c                    | j                  dd      }| j                  d      }|r;|r9t        j                  dj                  t	        j
                  |            d|      }|r'dj                  d |j                  d      D              }g }| j                  d      }|r|j                         }t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d	| j                  d
            t        | j                  d      t        |t        | j                  d      t        | j                  d      t        dt         | j                  d      t"        t%        j&                  d| j                  d      id      t(        t%        j&                  |d      t*        | j                  d      iS )z%Extract CI tags from Jenkins environ.
GIT_BRANCHr   r   z/{0}/c              3   0   K   | ]  }|sd |vs|  yw)=Nr   ).0rD   s     r   	<genexpr>z"extract_jenkins.<locals>.<genexpr>  s     JqqS\Js   r   
GIT_COMMITGIT_URL	GIT_URL_1	BUILD_TAGBUILD_NUMBER	BUILD_URLjenkins	WORKSPACEDD_CUSTOM_TRACE_IDr   r   r   )r2   rer   rY   r   r7   joinr   r5   r[   r8   r\   r]   r^   r_   rZ   r'   r   r   r   r   r   )r;   rf   namenode_labels_listnode_labels_envs        r   extract_jenkinsr    si    WW\2&F77:DvvfmmC$5$5f$=>DIxxJDJJsOJKggm,O*002

CGGL)-CGGIsww{/CDSWW[)t0cggk*y,djj$cgg.B&C "	
 	TZZ 0ZH377;'# r   c                 f    t         | j                  d      t        | j                  d      t        diS )z&Extract CI tags from Teamcity environ.r  TEAMCITY_BUILDCONF_NAMEteamcity)r`   r2   r   rZ   r   s    r   extract_teamcityr    s0     	%#''34z r   c                    t         j                  | j                  d      xs | j                  d      t         j                  | j                  d      t         j                  dj                  | j                  d            t         j                  | j                  d      t        | j                  d      t        | j                  d      t        | j                  d      t        | j                  d	      t        | j                  d
      t        dt        | j                  d      t         j                  | j                  d      iS )z$Extract CI tags from Travis environ.TRAVIS_PULL_REQUEST_BRANCHTRAVIS_BRANCHTRAVIS_COMMITrL   TRAVIS_REPO_SLUG
TRAVIS_TAGTRAVIS_JOB_WEB_URLTRAVIS_BUILD_IDTRAVIS_BUILD_NUMBERTRAVIS_BUILD_WEB_URLtravisciTRAVIS_BUILD_DIRTRAVIS_COMMIT_MESSAGE)r   r5   r2   r[   r8   rY   r6   r`   r\   r]   r^   r_   rZ   r'   ra   r   s    r   extract_travisr)    s     	

CGG89USWW_=U08??HZ@[\&-.SWW./sww12!67cgg45z 23CGG$;< r   c                  8   | j                  d      xs | j                  d      }| j                  d      xs | j                  d      }| j                  d      r| j                  d      }nU| j                  d      s| j                  d      r1dj                  | j                  d      | j                  d            }nd	}t        d
t        | j                  d      t        | j                  d      t
        | j                  d      t        | j                  d      t        | j                  d      t        j                  | j                  d      t        j                  |t        j                  |t        j                  | j                  d      t        j                  |t        j                  | j                  d      t        j                  | j                  d      t        j                   | j                  d      t        j"                  | j                  d      iS )z%Extract CI tags from Bitrise environ.BITRISE_GIT_COMMITGIT_CLONE_COMMIT_HASHBITRISEIO_GIT_BRANCH_DESTBITRISE_GIT_BRANCHBITRISE_GIT_MESSAGE GIT_CLONE_COMMIT_MESSAGE_SUBJECTGIT_CLONE_COMMIT_MESSAGE_BODYz{0}:
{1}NbitriseBITRISE_BUILD_SLUGBITRISE_TRIGGERED_WORKFLOW_IDBITRISE_BUILD_NUMBERBITRISE_BUILD_URLBITRISE_SOURCE_DIRGIT_REPOSITORY_URLBITRISE_GIT_TAGGIT_CLONE_COMMIT_AUTHOR_NAMEGIT_CLONE_COMMIT_AUTHOR_EMAILGIT_CLONE_COMMIT_COMMITER_NAME)r2   rY   rZ   r\   r]   r^   r_   r'   r   r8   r[   r5   r6   ra   rb   rc   r   r   )r;   re   rf   messages       r   extract_bitriser>    s    WW)*Ncgg6M.NFWW01RSWW=Q5RF
ww$%''/0	3	4@_8`$$GG67A`9a
  	ySWW12sww>?!78cgg12 45CGG$89

F*+G(F G)H!I!!377+K#L""CGG,L$M r   c                    t         dt        dj                  | j                  d      | j                  d            t        | j                  d      t
        | j                  d      t        | j                  d      t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d	      t        j                  | j                  d
      t        j                  | j                  d      t        j                  | j                  d      t        j                  | j                  d      iS )z#Extract CI tags from Buddy environ.buddyz{0}/{1}BUDDY_PIPELINE_IDBUDDY_EXECUTION_IDBUDDY_PIPELINE_NAMEBUDDY_EXECUTION_URLBUDDY_SCM_URLBUDDY_EXECUTION_REVISIONBUDDY_EXECUTION_BRANCHBUDDY_EXECUTION_TAG BUDDY_EXECUTION_REVISION_MESSAGE'BUDDY_EXECUTION_REVISION_COMMITTER_NAME(BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL)rZ   r\   rY   r2   r]   r^   r_   r   r8   r[   r5   r6   ra   r   r   r   s    r   extract_buddyrL    s     	wY%%cgg.A&BCGGL`Dabsww45!56cgg34CGGO4 :;

CGG45./CGG$FG!!377+T#U""CGG,V$W r   c                 J   i }d| v r| j                  d      }|r|j                  d      rx|j                  t        dt        | j                  d      t
        t        j                  | j                  d      | j                  d      | j                  d      dd	      i       |S )
z,Extract CI tags from codebuild environments.CODEBUILD_INITIATORcodepipelineawscodepipelineDD_PIPELINE_EXECUTION_IDCODEBUILD_BUILD_ARNDD_ACTION_EXECUTION_ID)rR  rQ  rS  r   r   )r2   r   r0   rZ   r\   r   r   r   )r;   r<   codebuild_initiators      r   extract_codebuildrU    s     D #!gg&;<#6#A#A.#QKK!#4)C!D $**3677;P3Q8;@Z8[69gg>V6W
 $.# Kr   APPVEYORTF_BUILDr   	BUILDKITECIRCLECIr   r   	GITLAB_CIJENKINS_URLTEAMCITY_VERSIONTRAVISr3  BUDDYrN  )NN)8__doc__r   r-   r"   r   r  typingr   r   r   r   ddtrace.extr   ddtrace.internal.loggerr   CI_APP_TEST_ORIGINr   r   r`   r\   r]   r^   r_   rZ   r   r   r'   r   r   r   r   r   LIBRARY_VERSIONr   compiler   __name__r)   r   r   r<   rj   r   r   r   r   r   r   r  r  r  r)  r>  rL  rU  r$   r   r   r   <module>rg     s     	  	   !   . "  
    # ' ! # 	  % $  
  $ $ !
"**0
1 @
0<f%P(V*%P4$&R&RD&B&: !"()*+#$"#%&)*.!O$)*~?+m-.	r   