build-admb-and-ss3-from-source #18
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
# Builds the stock synthesis executables for testing and distribution. | |
# for mac, linux, windows | |
# Runs on every push and PR (even draft PRs) | |
name: build-admb-and-ss3-from-source | |
on: | |
workflow_dispatch: | |
schedule: | |
- cron: '0 15 * * 2' # every Tuesday at 3pm UTC (= 1 0am EST or 11am EDT Eastern time) | |
jobs: | |
build-admb-and-ss3-from-source: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- {os: windows-latest} | |
- {os: macos-14} | |
- {os: macos-13} | |
- {os: ubuntu-latest} | |
# Limit run time to 90 min to avoid wasting action minutes. | |
# Compiling admb and ss3 on all operating systems takes ~30 min | |
timeout-minutes: 90 | |
# Steps represent a sequence of tasks that will be executed as part of the job | |
steps: | |
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | |
- uses: actions/checkout@v4 | |
# Set up R | |
- name: Set up R, specify rtools version and path for windows | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: 'release' | |
rtools-version: '42' | |
windows-path-include-rtools: TRUE | |
update-rtools: TRUE | |
# Checkout ADMB repository | |
- name: checkout admb and build from source, windows | |
uses: actions/checkout@v4 | |
with: | |
repository: admb-project/admb | |
path: admb | |
ref: admb-13.2 | |
# Build ADMB for Windows | |
- name: build admb, windows using rtools 42 | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
cd admb | |
make -j 4 | |
shell: cmd | |
- name: But admb in path | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
echo "D:\a\ss3-source-code\ss3-source-code\admb\build\admb\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append | |
echo $env:GITHUB_PATH | |
# Build ADMB for macOS | |
- name: clean, mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: cd admb && make clean | |
- name: see where admb is, mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
ls | |
cd admb && ls | |
- name: compile admb, mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
cd admb && make -j 4 | |
- name: see where admb is, mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
cd admb && ls -l | |
- name: put admb in path, mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
sudo mv admb /usr/local/bin | |
sudo chmod 755 /usr/local/bin/admb | |
echo "/usr/local/bin/admb" >> $GITHUB_PATH | |
# Build ADMB for Linux | |
- name: Update Ubuntu packages | |
if: matrix.config.os == 'ubuntu-latest' | |
run: sudo apt-get update | |
- name: Get admb and put in path, linux | |
if: matrix.config.os == 'ubuntu-latest' | |
run: | | |
cd admb && make clean | |
num_cpus=`cat /proc/cpuinfo | grep processor | wc -l` | |
num_cpus_minus1=$((num_cpus-1)) | |
make -j $num_cpus_minus1 | |
ls -l | |
chmod a+x admb | |
sudo mv admb /usr/local/bin | |
echo "/usr/local/bin/admb" >> $GITHUB_PATH | |
# Fetch Tags | |
- name: Fetch tags | |
run: | | |
git fetch --tags | |
git fetch --prune --unshallow || true | |
- name: Get the last tag on windows | |
id: get-latest-tag-win | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
git tag | |
$latest_tag = (git describe --abbrev=0 --tags) | |
$latest_tag_commit = ( git rev-list -n 1 $latest_tag) | |
$latest_commit = (git rev-list HEAD -n 1) | |
echo "tag=${latest_tag}" >> $env:GITHUB_OUTPUT | |
echo "tag_commit=${latest_tag_commit}" >> $env:GITHUB_OUTPUT | |
echo "commit=${latest_commit}" >> $env:GITHUB_OUTPUT | |
- name: pull the last tag value to use in the Rscript on windows | |
id: get-version-win | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
Out-File -InputObject ${{ steps.get-latest-tag-win.outputs.tag }} -FilePath .github/last_tag.txt | |
Out-File -InputObject ${{ steps.get-latest-tag-win.outputs.tag_commit }} -FilePath .github/last_tag_commit.txt | |
Out-File -InputObject ${{ steps.get-latest-tag-win.outputs.commit}} -FilePath .github/last_commit.txt | |
- name: Get the last tag on unix | |
id: get-latest-tag-unix | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' || matrix.config.os == 'ubuntu-latest' | |
run: | | |
git tag | |
latest_tag=$(git describe --abbrev=0 --tags) | |
latest_tag_commit=$(git rev-list -n 1 $latest_tag) | |
latest_commit=$(git rev-list HEAD -n 1) | |
echo "tag=${latest_tag}" >> $GITHUB_OUTPUT | |
echo "tag_commit=${latest_tag_commit}" >> $GITHUB_OUTPUT | |
echo "commit=${latest_commit}" >> $GITHUB_OUTPUT | |
- name: pull the last tag value to use in the Rscript on unix | |
id: get-version-unix | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' || matrix.config.os == 'ubuntu-latest' | |
run: | | |
echo "${{ steps.get-latest-tag-unix.outputs.tag }}" > .github/last_tag.txt | |
echo "${{ steps.get-latest-tag-unix.outputs.tag_commit }}" > .github/last_tag_commit.txt | |
echo "${{ steps.get-latest-tag-unix.outputs.commit }}" > .github/last_commit.txt | |
# R code to edit version info | |
- name: Edit the version info for safe version using R code | |
run: | | |
# Get the version | |
# get the last tag from the repository | |
tag_label <- readLines(".github/last_tag.txt") | |
# get commits from from the repository | |
tag_commit <- readLines(".github/last_tag_commit.txt") | |
last_commit <- readLines(".github/last_commit.txt") | |
message("The tag_label is ", tag_label) | |
if (substr(tag_label, start = 1, stop = 6) == "v3.30.") { | |
ver_num_full <- strsplit(tag_label, split = "v3.30", fixed = TRUE)[[1]][2] | |
ver_num <- strsplit(ver_num_full, split = ".", fixed = TRUE)[[1]][2] | |
if(length(grep("-", ver_num)) > 0) { | |
ver_num <- strsplit(ver_num, split = "-", fixed = TRUE)[[1]][1] | |
} | |
} else { | |
ver_num <- "unknown" | |
} | |
message("tag commit: ", tag_commit) | |
message("last commit: ", last_commit) | |
if(tag_commit == last_commit) { | |
# figure out the version using the tag | |
if(ver_num == "unknown") { | |
fix_ver_num <- "unknown" | |
} else { | |
ver_num_full_split <- strsplit(ver_num_full, split = ".", fixed = TRUE)[[1]] | |
if(length(ver_num_full_split) == 3) { | |
fix_ver_num <- ver_num_full_split[3] | |
} else if(length(ver_num_full_split) == 2) { | |
if(length(grep("-", ver_num_full_split, fixed = TRUE)) > 0) { | |
fix_ver_num <- strsplit(ver_num_full_split[2], split = "-", fixed = TRUE)[[1]][2] | |
fix_ver_num <- paste0("00-", fix_ver_num) | |
} else { | |
fix_ver_num <- "00" | |
} | |
} else { | |
fix_ver_num <- "unknown" | |
} | |
} | |
} else { | |
fix_ver_num <- "beta: not an official version of SS" | |
} | |
message("The minor version label is ", ver_num) | |
message("The patch version label is ", fix_ver_num) | |
# add version numbers to files | |
# safe file | |
ver_info <- readLines("SS_versioninfo_330safe.tpl") | |
ver_info_start <- grep('Create string with version info', ver_info, fixed = TRUE) | |
ver_info[ver_info_start + 1] <- | |
gsub('\\.xx', paste0('\\.', ver_num), ver_info[ver_info_start + 1]) | |
ver_info[ver_info_start + 1] <- | |
gsub('\\.yy', paste0('\\.', fix_ver_num), ver_info[ver_info_start+1]) | |
writeLines(ver_info, "SS_versioninfo_330safe.tpl") | |
#opt file | |
ver_info <- readLines("SS_versioninfo_330opt.tpl") | |
ver_info_start <- grep('Create string with version info', ver_info, fixed = TRUE) | |
ver_info[ver_info_start + 1] <- | |
gsub('\\.xx', paste0('\\.', ver_num), ver_info[ver_info_start + 1]) | |
ver_info[ver_info_start + 1] <- | |
gsub('\\.yy', paste0('\\.', fix_ver_num), ver_info[ver_info_start+1]) | |
writeLines(ver_info, "SS_versioninfo_330opt.tpl") | |
shell: Rscript {0} | |
# Build SS3 for Windows | |
- name: Build stock synthesis for windows with admb docker image | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
cd Compile | |
./Make_SS_fast.bat || true | |
./Make_SS_safe.bat || true | |
cd .. | |
- name: Move exes to a new folder on windows | |
if: matrix.config.os == 'windows-latest' | |
run: | | |
mkdir SS330 | |
chmod 777 SS330 | |
mv Compile/ss3.exe SS330/ | |
mv Compile/ss3_opt.exe SS330/ | |
mv SS330/ss3.exe SS330/ss3_win.exe | |
mv SS330/ss3_opt.exe SS330/ss3_opt_win.exe | |
# Build SS3 for macOS | |
- name: Build stock synthesis for mac with admb docker image | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
rm -rf SS330 | |
rm -rf ss3_osx.tar | |
mkdir SS330 | |
chmod 777 SS330 | |
/bin/bash ./Make_SS_330_new.sh -b SS330 | |
/bin/bash ./Make_SS_330_new.sh -b SS330 -o | |
- name: Verify binary on mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
shasum -a 256 SS330/ss3 | |
shasum -a 256 SS330/ss3_opt | |
- name: Delete unneeded files and change exe names on mac | |
if: matrix.config.os == 'macos-14' || matrix.config.os == 'macos-13' | |
run: | | |
cd SS330 | |
rm *.obj *.htp *.cpp ss3_opt.tpl | |
mv ss3 ss3_osx | |
mv ss3_opt ss3_opt_osx | |
# Build SS3 for Linux | |
- name: Build stock synthesis for linux with p flag and admb docker image | |
if: matrix.config.os == 'ubuntu-latest' | |
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 -p | |
/bin/bash ./Make_SS_330_new.sh --admb docker -b SS330 -o -p | |
- name: Verify binary on linux | |
if: matrix.config.os == 'ubuntu-latest' | |
run: | | |
sha256sum SS330/ss3 | |
sha256sum SS330/ss3_opt | |
- name: Delete unneeded files and change exe names on linux | |
if: matrix.config.os == 'ubuntu-latest' | |
run: | | |
cd SS330 | |
rm *.obj *.htp *.cpp ss3_opt.tpl ss3.tpl | |
mv ss3 ss3_linux | |
mv ss3_opt ss3_opt_linux | |
# Archive Binaries | |
- name: Archive binaries | |
if: success() | |
uses: actions/upload-artifact@main | |
with: | |
name: ss3-${{ matrix.config.os }} | |
path: SS330/ |