Macros for SAS Application Developers
https://github.com/sasjs/core
Loading...
Searching...
No Matches
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
58proc http method='GET' out=&fref url="&url";
59%if &mdebug=1 %then %do;
60 debug level = 3;
61%end;
62run;
63
64libname &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;