Macros for SAS Application Developers
https://github.com/sasjs/core
mp_gitreleaseinfo.sas
Go to the documentation of this file.
1 /**
2  @file
3  @brief Pulls latest release info from a GIT repository
4  @details Useful for grabbing the latest version number or other attributes
5  from a GIT server. Supported providers are GitLab and GitHub. Pull requests
6  are welcome if you'd like to see additional providers!
7 
8  Note that each provider provides slightly different JSON output. Therefore
9  the macro simply extracts the JSON and assigns the libname (using the JSON
10  engine).
11 
12  Example usage (eg, to grab latest release version from github):
13 
14  %mp_gitreleaseinfo(GITHUB,sasjs/core,outlib=mylibref)
15 
16  data _null_;
17  set mylibref.root;
18  putlog TAG_NAME=;
19  run;
20 
21  @param [in] provider The GIT provider for the release info. Accepted values:
22  @li GITLAB
23  @li GITHUB - Tables include root, assets, author, alldata
24  @param [in] project The link to the repository. This has different formats
25  depending on the vendor:
26  @li GITHUB - org/repo, eg sasjs/core
27  @li GITLAB - project, eg 1343223
28  @param [in] server= (0) If your repo is self-hosted, then provide the domain
29  here. Otherwise it will default to the provider domain (eg gitlab.com).
30  @param [in] mdebug= (0) Set to 1 to enable DEBUG messages
31  @param [out] outlib= (GITREL) The JSON-engine libref to be created, which will
32  point at the returned JSON
33 
34  <h4> SAS Macros </h4>
35  @li mf_getuniquefileref.sas
36 
37  <h4> Related Files </h4>
38  @li mp_gitreleaseinfo.test.sas
39 
40 **/
41 
42 %macro mp_gitreleaseinfo(provider,project,server=0,outlib=GITREL,mdebug=0);
43 %local url fref;
44 
45 %let provider=%upcase(&provider);
46 
47 %if &provider=GITHUB %then %do;
48  %if "&server"="0" %then %let server=https://api.github.com;
49  %let url=&server/repos/&project/releases/latest;
50 %end;
51 %else %if &provider=GITLAB %then %do;
52  %if "&server"="0" %then %let server=https://gitlab.com;
53  %let url=&server/api/v4/projects/&project/releases;
54 %end;
55 
56 %let fref=%mf_getuniquefileref();
57 
58 proc http method='GET' out=&fref url="&url";
59 %if &mdebug=1 %then %do;
60  debug level = 3;
61 %end;
62 run;
63 
64 libname &outlib JSON fileref=&fref;
65 
66 %if &mdebug=1 %then %do;
67  data _null_;
68  infile &fref;
69  input;
70  putlog _infile_;
71  run;
72 %end;
73 
74 %mend mp_gitreleaseinfo;