diff --git a/.github/actions/check-pharmr/action.yml b/.github/actions/check-pharmr/action.yml new file mode 100644 index 0000000..1465f5d --- /dev/null +++ b/.github/actions/check-pharmr/action.yml @@ -0,0 +1,157 @@ +name: Set up pharmr + +inputs: + as-release: + required: true + type: boolean + +runs: + using: "composite" + steps: + - uses: r-lib/actions/setup-r@v2 + with: + r-version: "release" + + - uses: r-lib/actions/setup-pandoc@v2 + + - name: Query dependencies + working-directory: pharmr_repo + run: | + install.packages('remotes') + saveRDS(remotes::dev_package_deps(dependencies = TRUE), ".github/depends.Rds", version = 2) + writeLines(sprintf("R-%i.%i", getRversion()$major, getRversion()$minor), ".github/R-version") + shell: Rscript {0} + + - uses: actions/setup-python@v2 + with: + python-version: "3.11" + + - name: Restore R package cache + if: runner.os != 'Windows' + uses: actions/cache@v2 + with: + path: ${{ env.R_LIBS_USER }} + key: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1-${{ hashFiles('.github/depends.Rds') }} + restore-keys: ${{ runner.os }}-${{ hashFiles('.github/R-version') }}-1- + + - name: Install system dependencies + working-directory: pharmr_repo + if: runner.os == 'Linux' + run: | + while read -r cmd + do + eval sudo $cmd + done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))') + sudo apt install libcurl4-openssl-dev + + - name: Install png (temporary) + working-directory: pharmr_repo + if: runner.os == 'Windows' + run: | + install.packages('png', repos='https://mran.microsoft.com/snapshot/2022-11-27') + shell: Rscript {0} + + - name: Install R packages + working-directory: pharmr_repo + run: | + remotes::install_deps(dependencies = TRUE) + remotes::install_cran("rcmdcheck") + install.packages('reticulate') + install.packages('devtools') + install.packages('promises') + remotes::install_local(force=TRUE) + shell: Rscript {0} + + - name: Checkout Pharmpy + uses: actions/checkout@v3 + with: + repository: pharmpy/pharmpy + path: pharmpy_repo + fetch-depth: 0 + + - name: Set up Pharmpy release version + working-directory: pharmpy_repo + if: ${{ inputs.as-release == true }} + run: | + git checkout -b release_latest "$(git rev-list --tags --max-count=1)" + + - id: get_pharmpy_version + working-directory: pharmpy_repo + if: ${{ inputs.as-release == true && runner.os == 'Linux'}} + run: | + echo "pharmpy_version=`git describe --tags`" >> $GITHUB_OUTPUT + + - name: Install Pharmpy in venv + working-directory: pharmpy_repo + if: runner.os != 'Windows' + run: | + python3 -m venv pharmpy_venv + source pharmpy_venv/bin/activate + pip install . + + - name: Install Pharmpy in venv + working-directory: pharmpy_repo + if: runner.os == 'Windows' + run: | + python -m venv pharmpy_venv + pharmpy_venv\Scripts\activate + pip install . + + - name: Start Pharmpy venv + working-directory: pharmr_repo + run: | + reticulate::py_discover_config() + venv_path = file.path('..', 'pharmpy_repo', 'pharmpy_venv') + if(.Platform$OS.type == "unix") { + venv_path = file.path(venv_path, 'bin') + } else { + venv_path = file.path(venv_path, 'Scripts') + } + reticulate::use_python(venv_path) + pharmr::print_pharmpy_version() + shell: Rscript {0} + + - name: Update DESCRIPTION and documentation + working-directory: pharmr_repo/deploy + run: | + venv_path = file.path('..', '..', 'pharmpy_repo', 'pharmpy_venv') + if(.Platform$OS.type == "unix") { + venv_path = file.path(venv_path, 'bin') + } else { + venv_path = file.path(venv_path, 'Scripts') + } + reticulate::use_python(venv_path) + + pharmpy <- reticulate::import("pharmpy") + pharmpy_version <- pharmpy$`__version__` + desc::desc_set('Version', pharmpy_version) + desc::desc_set('Date', Sys.Date()) + + reticulate::py_run_file('build_functions.py') + devtools::document() + shell: Rscript {0} + + - name: Check pharmr + working-directory: pharmr_repo + env: + _R_CHECK_CRAN_INCOMING_REMOTE_: false + run: | + venv_path = file.path('..', 'pharmpy_repo', 'pharmpy_venv') + if(.Platform$OS.type == "unix") { + venv_path = file.path(venv_path, 'bin') + } else { + venv_path = file.path(venv_path, 'Scripts') + } + reticulate::use_python(venv_path) + pharmr::print_pharmpy_version() + options(crayon.enabled = TRUE) + rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check") + rcmdcheck::rcmdcheck(args = c("--no-manual"), error_on = "warning", check_dir = "check") + shell: Rscript {0} + + - name: Upload check results + if: failure() + uses: actions/upload-artifact@main + with: + name: results-cran + path: check diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml index 92e562e..c7fe9ae 100644 --- a/.github/workflows/deploy.yaml +++ b/.github/workflows/deploy.yaml @@ -5,62 +5,71 @@ on: name: Deploy pharmr jobs: - check-pharmr: - uses: pharmpy/pharmr/.github/workflows/main.yaml@main - with: - as-release: true - deploy: runs-on: ubuntu-20.04 - needs: check-pharmr env: R_REMOTES_NO_ERRORS_FROM_WARNINGS: true RSPM: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest" GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - name: Download pharmr repo artifact - uses: actions/download-artifact@master + - name: Checkout pharmr + uses: actions/checkout@v3 with: - name: pharmr_repo path: pharmr_repo - - name: Set up git config + - name: Switch branch (remove when in main) working-directory: pharmr_repo - run: | - git config --local user.name "github-actions[bot]" - git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + run: + git switch use-composite-actions + + - uses: ./.github/actions/check-pharmr + with: + as-release: true - - name: Add changes to DESCRIPTION and documentation + - name: Check git working-directory: pharmr_repo - run: | - git add DESCRIPTION - git add NAMESPACE - git add R/functions_wrapper.R - git add man/ + run: git status - - name: Check if any files have been staged - working-directory: pharmr_repo - run: | - if [[ "$(git diff --name-only --cached | wc -c)" != "0" ]]; then - echo "has_been_updated=true" >> $GITHUB_ENV - else - echo "has_been_updated=false" >> $GITHUB_ENV - fi - - name: Commit and push changes, tag version - if: ${{ env.has_been_updated == 'true' }} - working-directory: pharmr_repo - run: | - echo "Committing changes" - git commit -m "Update DESCRIPTION/documentation" - echo "Tag version" - git tag "${{ needs.check-pharmr.outputs.pharmpy_version }}" - echo "Push changes" - git push https://$USERNAME:$REPO_KEY@github.com/pharmpy/pharmr.git - echo "push tags" - git push --tags https://$USERNAME:$REPO_KEY@github.com/pharmpy/pharmr.git - env: - REPO_KEY: ${{secrets.ACCESS_TOKEN}} - USERNAME: github-actions[bot] \ No newline at end of file + +# - name: Set up git config +# working-directory: pharmr_repo +# run: | +# git config --local user.name "github-actions[bot]" +# git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" +# +# - name: Add changes to DESCRIPTION and documentation +# working-directory: pharmr_repo +# run: | +# git add DESCRIPTION +# git add NAMESPACE +# git add R/functions_wrapper.R +# git add man/ +# git status +# +# - name: Check if any files have been staged +# working-directory: pharmr_repo +# run: | +# if [[ "$(git diff --name-only --cached | wc -c)" != "0" ]]; then +# echo "has_been_updated=true" >> $GITHUB_ENV +# else +# echo "has_been_updated=false" >> $GITHUB_ENV +# fi +# +# - name: Commit and push changes, tag version +# if: ${{ env.has_been_updated == 'true' }} +# working-directory: pharmr_repo +# run: | +# echo "Committing changes" +# git commit -m "Update DESCRIPTION/documentation" +# echo "Tag version" +# git tag "${{ needs.check-pharmr.outputs.pharmpy_version }}" +# echo "Push changes" +# git push https://$USERNAME:$REPO_KEY@github.com/pharmpy/pharmr.git +# echo "push tags" +# git push --tags https://$USERNAME:$REPO_KEY@github.com/pharmpy/pharmr.git +# env: +# REPO_KEY: ${{secrets.ACCESS_TOKEN}} +# USERNAME: github-actions[bot] \ No newline at end of file