diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 00000000..6faba655 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,69 @@ +name: Bug Report +description: Report asar not working as expected. +title: "[Bug]: " +labels: ["bug", "triage_needed"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! Before + filling out this report please search the existing issues to see + if the problem has already been reported. If it has, please add a + comment to the open issue or link to the related, but closed, issue in + this report. + - type: textarea + id: describe + attributes: + label: Describe the bug + description: Please provide a description of the bug. + validations: + required: true + - type: textarea + id: reproduce + attributes: + label: Describe how to reproduce the bug + description: | + Please include a minimal reproducible example (i.e., a + [reprex]((https://reprex.tidyverse.org/articles/reprex-dos-and-donts.html))). + If you have not heard of a [reprex](http://reprex.tidyverse.org/) + before, you can start by reading about them on the [tidyverse + blog](https://www.tidyverse.org/help/#reprex). Feel free to copy, paste, + and edit the [demo + vignette](https://github.com/NOAA-FIMS/FIMS/blob/4539fc4b6e65b901231c4fb66a113bb5b5d54d22/vignettes/fims-demo.Rmd) + for your reprex. + placeholder: | + # insert reprex here + validations: + required: false + - type: textarea + id: screenshots + attributes: + label: Screenshots + description: If applicable, add screenshots to help explain your problem. + validations: + required: false + - type: dropdown + id: os + attributes: + label: Which OS are you seeing the problem on? + multiple: true + options: + - Windows + - Mac + - Linux + - Other + validations: + required: false + - type: input + id: version + attributes: + label: Which version of asar are you seeing the problem on? + validations: + required: false + - type: textarea + id: context + attributes: + label: Additional Context + description: Add any other context about the problem here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 00000000..edf174f5 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,43 @@ +name: Feature Request +description: Request new features or changes to features +title: "[Feature]: " +labels: ["enhancement", "triage_needed"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! Before + filling out this report please search the existing issues to see + if the problem has already been reported. If it has, please add a + comment to the open issue or link to the related, but closed, issue in + this report. + - type: textarea + id: problem + attributes: + label: Is your feature request related to a problem? Please describe. + description: A clear and concise description of what the problem is. + placeholder: I'm always frustrated when... + validations: + required: true + - type: textarea + id: solution + attributes: + label: Describe the solution you would like. + description: A clear and concise description of what you want to happen. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Describe alternatives you have considered + description: A clear and concise description of any alternative solutions or features you have considered. + placeholder: Other solutions include ... + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context or screenshots about the feature request here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml new file mode 100644 index 00000000..678fd1fd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/question.yml @@ -0,0 +1,23 @@ +name: Question about asar +description: Ask a question about asar +title: "[Question]: " +labels: ["question", "triage_needed"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to ask a question! + - type: textarea + id: question + attributes: + label: What is your question? + placeholder: Please ask a clear and concise question about asar. + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional context + description: Add any other context or screenshots here. + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..22a35abc --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,12 @@ + + +# What is the feature? +* + +# How have you implemented the solution? +* + +# Does the PR impact any other area of the project, maybe another repo? +* diff --git a/.github/workflows/pr-checklist.yml b/.github/workflows/pr-checklist.yml new file mode 100644 index 00000000..6f258dfd --- /dev/null +++ b/.github/workflows/pr-checklist.yml @@ -0,0 +1,44 @@ +# This workflow automatically adds a comment containing a reviewer checklist +# when a new pull request is opened. +name: Add a comment with reviewer checklist when PR opened +on: + pull_request: + types: [opened] +jobs: + pr-checklist: + runs-on: ubuntu-latest + name: pr-checklist + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: 'Comment PR' + uses: actions/github-script@0.3.0 + if: github.event_name == 'pull_request' + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + var msg = `# Instructions for code reviewer + + Hello reviewer, thanks for taking the time to review this PR! + + - Please use this checklist during your review, checking off items that you have verified are complete! + - For PRs that don't make changes to code (e.g., changes to README.md or Github actions workflows), feel free to skip over items on the checklist that are not relevant. Remember it is still important to do a thorough review. + - Then, comment on the pull request with your review indicating where you have questions or changes need to be made before merging. + - Remember to review **every line of code** you’ve been asked to review, look at the context, make sure you’re improving code health, and compliment developers on good things that they do. + - PR reviews are a great way to learn, so feel free to share your tips and tricks. However, for optional changes (i.e., not required for merging), please include \`nit:\` (for nitpicking) before making the suggestion. For example, \`nit:\` I prefer using a \`data.frame()\` instead of a \`matrix\` because... + - Engage with the developer when they respond to comments and check off additional boxes as they become complete so the PR can be merged in when all the tasks are fulfilled. Make it clear when this has been reached by commenting on the PR with something like \`This PR is now ready to be merged, no changes needed\`. + + ## Checklist + + - [ ] The PR is requested to be merged into the appropriate branch (typically main) + - [ ] The code is well-designed. + - [ ] The functionality is good for the users of the code. + - [ ] Any User Interface changes are sensible and look good. + - [ ] The code isn’t more complex than it needs to be. + - [ ] Code coverage remains high, indicating the new code is tested. + - [ ] The developer used clear names for everything. + - [ ] Comments are clear and useful, and mostly explain why instead of what. + - [ ] Code is appropriately documented (doxygen and roxygen). + ` + const { issue: { number: issue_number }, repo: { owner, repo } } = context; + github.issues.createComment({ issue_number, owner, repo, body: msg }); diff --git a/DESCRIPTION b/DESCRIPTION index 8e3b0e99..9958ccf4 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -16,6 +16,7 @@ Imports: fs, ggplot2, gridExtra, + gt, naniar, officer, openxlsx, @@ -30,10 +31,10 @@ Imports: utils Suggests: knitr, - rmarkdown, parallel, - snowfall, r4ss, + rmarkdown, + snowfall, testthat (>= 3.0.0) VignetteBuilder: knitr diff --git a/R/add_theme.R b/R/add_theme.R index 0c760545..7ea07dfa 100644 --- a/R/add_theme.R +++ b/R/add_theme.R @@ -16,6 +16,11 @@ add_theme <- function(x) { # ) # ) # this is bad coding practice, but what I have for now + + + # Initialize theme_obj to NULL + theme_obj <- NULL + if (class(x)[1] == "flextable") { theme_obj <- x |> flextable::merge_h(i = 1, part = "header") |> @@ -26,9 +31,10 @@ add_theme <- function(x) { } else if (class(x)[1] == "gt_tbl") { theme_obj <- x # gt object - } else if (class(x)[1] == "kableExtra" | as.character(class(x)[2]) == "knitr_kable") { + } else if ("kableExtra" %in% class(x) || + (length(class(x)) > 1 && class(x)[2] == "knitr_kable")) { theme_obj <- x - } else if (class(x)[1] == "gg" | class(x)[2] == "ggplot") { # - removed bc wouldn't work with only 1 entry in the class for other object classes + } else if ("gg" %in% class(x) || "ggplot" %in% class(x)) { theme_obj <- x + ggplot2::theme( plot.background = ggplot2::element_rect(fill = "transparent"), @@ -36,7 +42,10 @@ add_theme <- function(x) { panel.grid = ggplot2::element_blank(), panel.border = ggplot2::element_rect(colour = "black", fill = NA, linewidth = 0.5) # text = ggplot2::element_text(size = 12, family = "Cambria") - ) + ) + + # add default nmfs color palette (palette will be "ocean") + nmfspalette::scale_color_nmfs() + + nmfspalette::scale_fill_nmfs() # Determining how to treat a legend if there is one # check if one is present # check_for_legend <- function(x) { diff --git a/R/create_template.R b/R/create_template.R index fe629aaf..6781c0ff 100644 --- a/R/create_template.R +++ b/R/create_template.R @@ -528,23 +528,27 @@ create_template <- function( # Convert output file if TRUE if (convert_output) { print("__________Converting output file__________") - if(tolower(model) == "bam" & is.null(fleet_names)) { + if (tolower(model) == "bam" & is.null(fleet_names)) { warning("Fleet names not defined.") } else if (tolower(model) == "bam") { - convert_output(output_file = model_results, - outdir = resdir, - file_save = TRUE, - model = model, - fleet_names = fleet_names, - savedir = subdir, - save_name = paste(species, "_std_res_", year, sep = "")) + convert_output( + output_file = model_results, + outdir = resdir, + file_save = TRUE, + model = model, + fleet_names = fleet_names, + savedir = subdir, + save_name = paste(sub(" ", "_", species), "_std_res_", year, sep = "") + ) } else { - convert_output(output_file = model_results, - outdir = resdir, - file_save = TRUE, - model = model, - savedir = subdir, - save_name = paste(species, "_std_res_", year, sep = "")) + convert_output( + output_file = model_results, + outdir = resdir, + file_save = TRUE, + model = model, + savedir = subdir, + save_name = paste(species, "_std_res_", year, sep = "") + ) } } diff --git a/README.md b/README.md index 5b1b2fbd..7cc7ada7 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ asar::create_template( year = 2010, author = c("John Snow", "Danny Phantom", "Patrick Star"), include_affiliation = TRUE, - parameters = FALSE, resdir = "C:/Users/Documents/Example_Files", model_results = "Report.sso", model = "SS3" diff --git a/inst/templates/skeleton/acknowledgments.qmd b/inst/templates/skeleton/acknowledgments.qmd index 8fa8c479..c2f08519 100644 --- a/inst/templates/skeleton/acknowledgments.qmd +++ b/inst/templates/skeleton/acknowledgments.qmd @@ -1 +1 @@ -## Acknowledgements +## Acknowledgements {#sec-acknowledgements} diff --git a/inst/templates/skeleton/appendix.qmd b/inst/templates/skeleton/appendix.qmd index c4ab246d..db68a12e 100644 --- a/inst/templates/skeleton/appendix.qmd +++ b/inst/templates/skeleton/appendix.qmd @@ -1 +1 @@ -## Appendices +## Appendices {#sec-appendix} diff --git a/inst/templates/skeleton/data.qmd b/inst/templates/skeleton/data.qmd index 194f2ae4..208bd248 100644 --- a/inst/templates/skeleton/data.qmd +++ b/inst/templates/skeleton/data.qmd @@ -1,4 +1,4 @@ -## Data +## Data {#sec-data} -### Assessment Methods +### Assessment Methods {#sec-assessment-methods} -### Stock Status +### Stock Status {#sec-stock-status} -### Stock Structure and ID +### Stock Structure and ID {#sec-stock-id} -### Fishery Descriptions +### Fishery Descriptions {#sec-fishery-desscriptions} -### Ecosystem Considerations or climate indicators +### Ecosystem Considerations or climate indicators {#sec-eco-indicators} -### Configuration +### Configuration {#sec-configuration} -### Sensitivity Analyses +### Sensitivity Analyses {#sec-model-sensitivity-analyses} -### Management Benchmarks +### Management Benchmarks {#sec-management-benchmarks} -### Diagnostics +### Diagnostics {#sec-diagnostics} -### Projection Scenarios +### Projection Scenarios {#sec-projection-scenarios} -### Recruitment Estimates and Deviations +### Recruitment Estimates and Deviations {#recruitment-estimates} -### Model Fits +### Model Fits {#sec-model-fits} -### Model Diagnostics +### Model Diagnostics {#sec-model-diagnostics} -### Sensitivity Analysis +### Sensitivity Analysis {#sec-res-sensitivity-analyses}