Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add release workflow. #4

Merged
merged 5 commits into from
Mar 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,9 @@ setImgSrc.js
^docs$
^pkgdown$
^README\.Rmd$
^README\.html$
^LICENSE\.md$
^\.pre-commit-config\.yaml
\.githooks
\.github
RELEASE_BODY\.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
name: License Check 🃏
uses: insightsengineering/r.pkg.template/.github/workflows/licenses.yaml@main

check-reuse:
check:
name: RMD check 📦
uses: ./.github/workflows/R-CMD-check.yaml

Expand All @@ -37,11 +37,10 @@ jobs:
name: Version Bump 🤜🤛
if: github.event_name == 'push' && github.ref != 'refs/heads/main'
uses: insightsengineering/r.pkg.template/.github/workflows/version-bump.yaml@main
with:
disable-precommit-autoupdate: true
secrets:
REPO_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# roxygen:
# name: Roxygen 📦
# uses: ./.github/workflows/Roxygen.yaml


20 changes: 20 additions & 0 deletions .github/workflows/Release-package.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
on:
push:
branches: main
pull_request:
branches: main
workflow_dispatch:

name: release

jobs:
build:
name: RMD Build and check
uses: ./.github/workflows/R-CMD-check.yaml
docs:
name: Build and Deploy Docs
uses: ./.github/workflows/pkgdown.yaml
release:
name: Release
if: github.event_name == 'push'
uses: ./.github/workflows/release.yaml
54 changes: 48 additions & 6 deletions .github/workflows/Test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ on:

name: test-coverage

# concurrency:
# group: roxygen-${{ github.event.pull_request.number || github.ref }}
# cancel-in-progress: true
permissions:
contents: read
pull-requests: write

jobs:
test-coverage:
Expand All @@ -24,23 +24,27 @@ jobs:

- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::covr
extra-packages: |
any::covr
any::xml2
any::dplyr
any::knitr
needs: coverage

- name: Test coverage
run: |
covr::codecov(
quiet = FALSE,
clean = FALSE,
install_path = file.path(Sys.getenv("RUNNER_TEMP"), "package")
install_path = file.path(normalizePath(Sys.getenv("RUNNER_TEMP"), winslash = "/"), "package")
)
shell: Rscript {0}

- name: Show testthat output
if: always()
run: |
## --------------------------------------------------------------------
find ${{ runner.temp }}/package -name 'testthat.Rout*' -exec cat '{}' \; || true
find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true
shell: bash

- name: Upload test results
Expand All @@ -49,3 +53,41 @@ jobs:
with:
name: coverage-test-failures
path: ${{ runner.temp }}/package

- name: Create Coverage Report for comment
run: |
covr::package_coverage() |>
covr::to_cobertura(filename = "cobertura.xml")

xml <- xml2::read_xml("cobertura.xml")

pkg_cov <- xml |>
xml2::xml_find_first("packages/package") |>
xml2::xml_attrs() |>
dplyr::bind_rows()

fnc_cov <- xml |>
xml2::xml_find_first("packages/package") |>
xml2::xml_find_all("classes/class") |>
xml2::xml_attrs() |>
lapply(dplyr::bind_rows)

res <- list(pkg_cov, fnc_cov) |>
dplyr::bind_rows() |>
dplyr::transmute(
Name = dplyr::coalesce(filename, name),
`Coverage (%)` = round(as.numeric(`line-rate`)*100, digits = 2)
) |>
knitr::kable()

c("# Code coverage", res) |>
writeLines(con = "coverage.md")
shell: Rscript {0}

- name: Add Coverage PR Comment
uses: marocchino/sticky-pull-request-comment@v2
if: github.event_name == 'pull_request'
with:
recreate: true
header: coverage
path: coverage.md
44 changes: 22 additions & 22 deletions .github/workflows/fast-forward.yaml
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
name: Fast Forward PR
on:
issue_comment:
types: [created]
jobs:
fast_forward_job:
name: Fast Forward
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/fast-forward')
runs-on: ubuntu-latest
steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
uses: actions/checkout@v2
# Basic use case example
- name: Fast Forward PR
id: ff-action
uses: endre-spotlab/[email protected]
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
success_message: 'Success! Fast forwarded ***target_base*** to ***source_head***! ```git checkout target_base && git merge source_head --ff-only``` '
failure_message: 'Failed! Cannot do fast forward! - try merging the target back into source first.'
name: Fast Forward PR
on:
issue_comment:
types: [created]

jobs:
fast_forward_job:
name: Fast Forward
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/fast-forward')
runs-on: ubuntu-latest
steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
uses: actions/checkout@v2
# Basic use case example
- name: Fast Forward PR
id: ff-action
uses: endre-spotlab/[email protected]
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
success_message: 'Success! Fast forwarded ***target_base*** to ***source_head***! ```git checkout target_base && git merge source_head --ff-only``` '
failure_message: 'Failed! Cannot do fast forward! - try merging the target back into source first.'
88 changes: 88 additions & 0 deletions .github/workflows/pkgdown.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Workflow adjusted from usethis::use_pkgdown_github_pages() to also publish pages from PRs in a subfolder

on:
# push:
# branches: [main, master]
# pull_request:
# branches: [main, master]
# release:
# types: [published]
workflow_dispatch:
workflow_call:

permissions:
contents: write
pull-requests: write

name: pkgdown

jobs:
pkgdown:
runs-on: ubuntu-latest
# Only restrict concurrency for non-PR jobs
concurrency:
group: pkgdown-${{ github.event_name != 'pull_request' || github.run_id }}
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4

- uses: r-lib/actions/setup-pandoc@v2

- uses: r-lib/actions/setup-r@v2
with:
use-public-rspm: true

- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::pkgdown, local::.
needs: website

- name: Build site
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
shell: Rscript {0}

# If not pull request a brand new webpage is deployed

- name: Deploy to GitHub pages 🚀
if: github.event_name != 'pull_request'
uses: JamesIves/[email protected]
with:
clean: false
branch: gh-pages
folder: docs

# If pull request the webpage is deployed inside a dev/"PR number" folder for review

- name: Add pkgdown PR Comment
uses: marocchino/sticky-pull-request-comment@v2
if: github.event_name == 'pull_request'
with:
recreate: true
header: pkgdown
message: |
# Github pages
Review the pkgdown webpage for the PR [here](https://${{ github.repository_owner }}.github.io/${{ github.event.repository.name }}/dev/${{ github.event.pull_request.number }})

- name: Copy page to temp folder
if: github.event_name == 'pull_request'
run: |
mkdir -p /home/runner/work/dev
cp -r ./docs/* /home/runner/work/dev

- name: Check out gh-pages branch
if: github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: gh-pages

- name: Copy and push to gh-pages
if: github.event_name == 'pull_request'
run: |
mkdir -p dev/${{ github.event.pull_request.number }}
cp -r /home/runner/work/dev/* ./dev/${{ github.event.pull_request.number }}
git config --global user.email "[email protected]"
git config --global user.name "Actions Robot From Github Actions"
git add .
git commit -m "Update gh pages from the PR"
git push
81 changes: 81 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
---
name: Release 🚀

on:
workflow_call:
inputs:
create-dev-releases:
description: 'Create dev releases'
required: false
default: false
type: boolean
is-pre-release:
description: 'Mark as pre-release'
required: false
default: true
type: boolean
workflow_dispatch:

concurrency:
group: release-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
release:
name: Release 🚀
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Setup token 🔑
id: github-token
run: |
if [ "${{ secrets.REPO_GITHUB_TOKEN }}" == "" ]; then
echo "REPO_GITHUB_TOKEN is empty. Substituting it with GITHUB_TOKEN."
echo "token=${{ secrets.GITHUB_TOKEN }}" >> $GITHUB_OUTPUT
else
echo "Using REPO_GITHUB_TOKEN."
echo "token=${{ secrets.REPO_GITHUB_TOKEN }}" >> $GITHUB_OUTPUT
fi
shell: bash

- name: Checkout repo 🛎
uses: actions/checkout@v4

- name: Get branch names 🌿
id: branch-name
uses: tj-actions/branch-names@v7

- name: Check if running with dev tag 🏷️
id: dev-tag
run: |
echo "Current tag: ${{ steps.branch-name.outputs.tag }}"
current_tag="${{ steps.branch-name.outputs.tag }}"
if [ "$(echo "$current_tag" | grep -E "^v([0-9]+\.)?([0-9]+\.)?([0-9]+)(-[0-9]+)$")" != "" ]; then
echo "Running for rc-tag."
echo "is-dev-tag=true" >> $GITHUB_OUTPUT
else
echo "is-dev-tag=false" >> $GITHUB_OUTPUT
fi
shell: bash

- name: Generate Changelog 📜
run: |
RELEASE_VERSION=$(awk -F: '/Version:/{gsub(/[ ]+/,"") ; print $2}' DESCRIPTION)
REPOSITORY_NAME="${{ github.event.repository.name }}"
(awk "/^#+.*${REPOSITORY_NAME//./\.}.*${RELEASE_VERSION//./\.}$/{flag=1;next}/^#+.*${REPOSITORY_NAME//./\.}.*/{flag=0}flag" NEWS.md | grep -v "^$" || echo "* ${RELEASE_VERSION}") > RELEASE_BODY.txt

- name: Create release 🌟
if: >-
steps.dev-tag.outputs.is-rc-tag == 'false' ||
inputs.create-dev-releases == true
# https://github.com/softprops/action-gh-release/pull/406#issuecomment-1934635958
uses: softprops/action-gh-release@4634c16e79c963813287e889244c50009e7f0981
with:
body_path: RELEASE_BODY.txt
token: ${{ steps.github-token.outputs.token }}
generate_release_notes: true
files: |
LICENSE
LICENSE.md
prerelease: inputs.pre-release
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@ docs
inst/doc
.Rhistory
**/debug
**/*.html
README.html
RELEASE_BODY.txt
3 changes: 2 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: chefStats
Title: Provide methods for different statistics
Version: 0.0.0.9001
Version: 0.1.0
Authors@R:
c(person(given = "MEWP (Matthew Phelps)",
role = "aut",
Expand Down Expand Up @@ -48,3 +48,4 @@ Remotes:
hta-pharma/chef
Config/testthat/edition: 3
VignetteBuilder: knitr
Config/testthat/parallel: true
4 changes: 4 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# chefStats 0.1.0
- Initial release of chefstats
- Contains an initial selection of statistical functions for use in the {ramnog} ecosystem.

2 changes: 1 addition & 1 deletion README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ This project supports two styles of githooks.

1. The first style is to use the githooks provided in the `.githooks` directory. To use these hooks, run the following command in the root of the project:
- These hooks are very simple just blocking the commit to protected branches.
``
```
git config --local core.hooksPath .githooks/
```

Expand Down
Loading
Loading