WIP: add switch in benchmark to use correct SPR0 #388
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Build SS3 and run models without estimation (from .par) and no hessian | |
# Runs on every push and PR (even draft PRs) | |
name: run-ss3-no-est | |
on: | |
workflow_dispatch: | |
push: | |
paths: | |
- '**.tpl' | |
# branches: | |
# - main | |
pull_request: | |
paths: | |
- '**.tpl' | |
branches: | |
- main | |
# run models without estimation, then try to run again with .ss_new | |
jobs: | |
run-ss3-no-est: | |
runs-on: ubuntu-latest | |
env: | |
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true | |
RSPM: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest" | |
steps: | |
- name: Checkout ss3 repo | |
uses: actions/checkout@v4 | |
# - name: Get last compiled version of SS; alternative to compiling in same wkflow | |
# uses: dawidd6/action-download-artifact@v2 | |
# with: | |
# workflow: build-centos.yml | |
# workflow_conclusion: success | |
# name: ss_linux | |
# path: ss_linux | |
- name: Checkout models repo | |
uses: actions/checkout@v4 | |
with: | |
repository: 'nmfs-ost/ss3-test-models' | |
path: test-models-repo | |
- name: Update Ubuntu packages | |
run: | | |
sudo add-apt-repository ppa:ubuntu-toolchain-r/test | |
sudo apt-get update | |
sudo apt-get install --only-upgrade libstdc++6 | |
- name: setup R | |
uses: r-lib/actions/setup-r@v2 | |
# - name: Get admb and put in path, linux | |
# run: | | |
# wget https://github.com/admb-project/admb/releases/download/admb-13.1/admb-13.1-linux.zip | |
# sudo unzip admb-13.1-linux.zip -d /usr/local/bin | |
# sudo chmod 755 /usr/local/bin/admb-13.1/bin/admb | |
# echo "/usr/local/bin/admb-13.1/bin" >> $GITHUB_PATH | |
# - name: Build ss3 | |
# run: | | |
# rm -rf SS330 | |
# mkdir SS330 | |
# /bin/bash ./Make_SS_330_new.sh -b SS330 | |
- name: Build stock synthesis with admb docker image | |
run: | | |
rm -rf SS330 | |
rm -rf ss3_osx.tar | |
mkdir SS330 | |
chmod 777 SS330 | |
/bin/bash ./Make_SS_330_new.sh --admb docker -b SS330 | |
- name: move exes, scripts to needed locations | |
run: | | |
mv test-models-repo/models test-models-repo/model_runs | |
mv SS330/ss3 test-models-repo/model_runs/ss3 | |
mv test-models-repo/.github/r_scripts/run_from_par.R test-models-repo/run_from_par.R | |
mv test-models-repo/.github/r_scripts/run_compare_noest.R test-models-repo/run_compare_noest.R | |
- name: change permissions on ss3 exes | |
run: sudo chmod a+x test-models-repo/model_runs/ss3 | |
- name: run models without estimation | |
run: | | |
cd test-models-repo && Rscript run_from_par.R | |
- name: download R packages for parallel | |
run: Rscript -e 'install.packages(c("parallely", "furrr", "future"))' | |
- name: Run comparison | |
run: | | |
mkdir test-models-repo/run_R | |
cd test-models-repo && Rscript run_compare_noest.R | |
- name: Determine results of test | |
run: cd test-models-repo && Rscript .github/r_scripts/check_failed.R | |
- name: Run .ss_new | |
run: | | |
# code to run the ss_new models | |
mod_names <- list.dirs("test-models-repo/model_runs", | |
full.names = FALSE, recursive = FALSE) | |
mod_paths <- list.dirs("test-models-repo/model_runs", | |
full.names = TRUE, recursive = FALSE) | |
print(mod_names) | |
run_ssnew <- function(dir) { | |
wd <- getwd() | |
print(wd) | |
on.exit(system(paste0("cd ", wd))) | |
# delete old starter files, rename forecast.ss_new and starter.ss_new files | |
file.remove(file.path(dir, "starter.ss")) | |
file.remove(file.path("forecast.ss")) | |
file.rename(file.path(dir, "starter.ss_new"), file.path(dir,"starter.ss")) | |
file.rename(file.path(dir, "forecast.ss_new"), file.path(dir,"forecast.ss")) | |
# rename control and data files to standardized names (from the starter files) | |
start <- readLines(file.path(dir, "starter.ss")) | |
first_val_line <- grep("0=use init values in control file", start, fixed = TRUE) | |
datname <- start[first_val_line-2] | |
ctlname <- start[first_val_line-1] | |
print(datname) | |
print(ctlname) | |
file.remove(file.path(dir, datname)) | |
file.remove(file.path(dir, ctlname)) | |
file.rename(file.path(dir,"data_echo.ss_new"), file.path(dir, datname)) | |
file.rename(file.path(dir, "control.ss_new"), file.path(dir, ctlname)) | |
# run the models without estimation | |
file.remove(file.path(dir, "Report.sso")) | |
# see if model finishes without error | |
system(paste0("cd ", dir, " && ../ss3 -stopph 0 -nohess")) | |
model_ran <- file.exists(file.path(dir, "control.ss_new")) | |
return(model_ran) | |
} | |
ncores <- parallelly::availableCores(omit = 1) | |
future::plan(future::multisession, workers = ncores) | |
mod_ran <- furrr::future_map(mod_paths, function(x) {tryCatch(run_ssnew(x), | |
error = function(e) print(e) | |
)} | |
) | |
mod_errors <- mod_names[unlist(lapply(mod_ran, function(x) "simpleError" %in% class(x)))] | |
success <- TRUE | |
if(length(mod_errors) > 0) { | |
message("Model code with errors were: ", paste0(mod_errors, collapse = ", "), | |
". See error list above for more details.") | |
success <- FALSE | |
} else { | |
message("All code ran without error, but model runs may still have failed.") | |
} | |
mod_no_run <- mod_names[unlist(lapply(mod_ran, function(x) isFALSE(x)))] #false means model didn't run | |
if(length(mod_no_run) > 0) { | |
message("Models that didn't run are ", paste0(mod_no_run, collapse = ", ")) | |
success <- FALSE | |
} else { | |
message("All models ran without error.") | |
} | |
# determine if job fails or passes | |
if(success == FALSE) { | |
stop("Job failed due to code with errors or models that didn't run.") | |
} else { | |
message("Job passed! All models successfully ran.") | |
} | |
shell: Rscript {0} | |
- name: Archive results | |
uses: actions/upload-artifact@main | |
if: always() | |
with: | |
name: 'result_textfiles' | |
path: test-models-repo/run_R/ |