33# Starts with a vanilla Opal docker composition, installs dsBase
44# and dsBaseClient (as well as dependencies - including a fully functional
55# Opal server).
6- # Does checks and tests then saves results to testStatus repo.
76#
87# Inside the root directory $(Pipeline.Workspace) will be a file tree like:
98# /dsBaseClient <- Checked out version of datashield/dsBaseClient
10- # /testStatus <- Checked out version of datashield/testStatus
119# /logs <- Where results of tests and lots are collated
1210#
1311# As of May 2020 this takes ~ 70 mins to run.
@@ -34,18 +32,7 @@ variables:
3432 branchName : $(Build.SourceBranchName)
3533 test_filter : ' *'
3634 _r_check_system_clock_ : 0
37-
38-
39- # ########################################################################################
40- # Need to define all the GH repos and their access tokens, see:
41- # https://docs.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml
42- resources :
43- repositories :
44- - repository : testStatusRepo
45- type : github
46- endpoint : datashield-testing
47- name : datashield/testStatus
48- ref : master
35+ perf.profile : ' azure-pipeline'
4936
5037
5138# ########################################################################################
8269 - checkout : self
8370 path : ' dsBaseClient'
8471
85- - checkout : testStatusRepo
86- path : ' testStatus'
87- persistCredentials : true
88- condition : and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest'))
89-
9072
9173 # ####################################################################################
9274 # The MySQL install that comes with the VM doesn't seem compatable with our set up
@@ -233,13 +215,13 @@ jobs:
233215 # Install dsBase.
234216 # If previous steps have failed then don't run.
235217 - bash : |
236- R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https ://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)) ; opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o )"
218+ R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http ://localhost:8080/') ; opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal )"
237219
238- R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https ://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0) ); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)"
220+ R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http ://localhost:8080/' ); dsadmin.install_github_package(opal, 'dsBase', username = 'datashield', ref = 'v7.0-dev'); opal.logout(opal)"
239221
240222 sleep 60
241223
242- R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https ://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0) ); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)"
224+ R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http ://localhost:8080/' ); dsadmin.set_option(opal, 'default.datashield.privacyControlLevel', 'permissive'); opal.logout(opal)"
243225
244226 workingDirectory: $(Pipeline.Workspace)/dsBaseClient/tests/testthat/data_files
245227 displayName: 'Install dsBase to Opal, as set disclosure test options'
@@ -272,7 +254,7 @@ jobs:
272254 #
273255 # "_-|arg-|smk-|datachk-|disc-|math-|expt-|expt_smk-"
274256 # testthat::test_package("$(projectName)", filter = "_-|datachk-|smk-|arg-|disc-|perf-|smk_expt-|expt-|math-", reporter = multi_rep, stop_on_failure = FALSE)
275- sudo R -q -e '
257+ sudo env PERF_PROFILE=$PERF_PROFILE R -q -e '
276258 library(covr);
277259 dsbase.res <- covr::package_coverage(
278260 type = c("none"),
@@ -361,9 +343,9 @@ jobs:
361343 # If previous steps have failed then don't run
362344 - bash : |
363345
364- R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'https ://localhost:8443', opts = list(ssl_verifyhost=0, ssl_verifypeer=0)) ; opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(o )"
346+ R -q -e "library(opalr); opal <- opal.login(username = 'administrator', password = 'datashield_test&', url = 'http ://localhost:8080') ; opal.put(opal, 'system', 'conf', 'general', '_rPackage'); opal.logout(opal )"
365347
366- R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='https ://localhost:8443/', opts = list(ssl_verifyhost=0, ssl_verifypeer=0) ); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)"
348+ R -q -e "library(opalr); opal <- opal.login('administrator','datashield_test&', url='http ://localhost:8080/' ); dsadmin.install_github_package(opal, 'dsDanger', username = 'datashield', ref = '6.3.4'); opal.logout(opal)"
367349
368350 workingDirectory: $(Pipeline.Workspace)/dsBaseClient
369351 displayName: 'Install dsDanger package on Opal server'
@@ -387,7 +369,7 @@ jobs:
387369 # testthat::testpackage uses a MultiReporter, comprised of a ProgressReporter and JunitReporter
388370 # R output and messages are redirected by sink() to test_console_output.txt
389371 # junit reporter output is to test_results.xml
390- sudo R -q -e '
372+ sudo env PERF_PROFILE=$PERF_PROFILE R -q -e '
391373 library(covr);
392374 dsdanger.res <- covr::package_coverage(
393375 type = c("none"),
@@ -524,75 +506,6 @@ jobs:
524506 displayName: 'Down Opal Docker Composition'
525507 condition: succeeded()
526508
527- #####################################################################################
528- # Windup phase
529- #####################################################################################
530-
531- #####################################################################################
532- # Output some important version numbers to file. This gets added to the testStatus
533- # commit so it can be parsed and used on the status table.
534- - bash : |
535-
536- echo 'branch:'$(branchName) >> $(datetime).txt
537- echo 'os:'$(lsb_release -ds) >> $(datetime).txt
538- echo 'R:'$(R --version | head -n 1) >> $(datetime).txt
539- echo 'opal:'$(opal system --opal localhost:8443 --user administrator --password "datashield_test&" --version) >> $(datetime).txt
540-
541- workingDirectory: $(Pipeline.Workspace)/logs
542- displayName: 'Write versions to file'
543- condition: succeededOrFailed()
544-
545-
546- #####################################################################################
547- # Checkout the testStatus repo, add the results from here, push back to GH.
548- # TODO: Automatically pull in better email/name info from somewhere.
549- # TODO: More debug info in commit message
550- - bash : |
551-
552- # Git needs some config set to be able to push to a repo.
553- git config --global user.email "you@example.com"
554- git config --global user.name "Azure pipeline"
555-
556- # This repo is checked out in detatched head state, so reconnect it here.
557- git checkout master
558-
559- # It is possible that other commits have been made to the testStatus repo since it
560- # was checked out. i.e. other pipeline runs might have finished.
561- git pull
562-
563- # Make the directories if they dont already exist
564- mkdir --parents logs/$(projectName)/$(branchName)
565- mkdir --parents docs/$(projectName)/$(branchName)/latest
566-
567- cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/
568- cp $(Pipeline.Workspace)/logs/coveragelist.csv logs/$(projectName)/$(branchName)/$(datetime).csv
569-
570- cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/
571- cp $(Pipeline.Workspace)/logs/test_results.xml logs/$(projectName)/$(branchName)/$(datetime).xml
572-
573- cp $(Pipeline.Workspace)/logs/$(datetime).txt logs/$(projectName)/$(branchName)/
574-
575- # Run the script to parse the results and build the html pages.
576- # status.py JUnit_file.xml coverage_file.csv output_file.html local_repo_path remote_repo_name branch
577- source/status.py logs/$(projectName)/$(branchName)/$(datetime).xml logs/$(projectName)/$(branchName)/$(datetime).csv logs/$(projectName)/$(branchName)/$(datetime).txt status.html $(Pipeline.Workspace)/$(projectName) $(projectName) $(branchName)
578-
579- cp status.html docs/$(projectName)/$(branchName)/latest/index.html
580- git add logs/$(projectName)/$(branchName)/coveragelist.csv
581- git add logs/$(projectName)/$(branchName)/test_results.xml
582- git add logs/$(projectName)/$(branchName)/$(datetime).xml
583- git add logs/$(projectName)/$(branchName)/$(datetime).csv
584- git add logs/$(projectName)/$(branchName)/$(datetime).txt
585- git add docs/$(projectName)/$(branchName)/latest/index.html
586-
587- git commit -m "Azure auto test for $(projectName)/$(branchName) @ $(datetime)" -m "Debug info:\nProjectName:$(projectName)\nBranchName:$(branchName)\nDataTime:$(datetime)"
588- git push
589- exit 0
590-
591- workingDirectory: $(Pipeline.Workspace)/testStatus
592- displayName: 'Parse test results'
593- condition: and(eq(variables['Build.Repository.Name'], 'datashield/dsBaseClient'), ne(variables['Build.Reason'], 'PullRequest'))
594-
595-
596509 #####################################################################################
597510 # Output the environment information to the console. This is useful for debugging.
598511 # Always do this, even if some of the above has failed or the job has been cacelled.
0 commit comments