## Technologies and Tools
This repository primarily utilizes the following technologies and tools:
- R: The main programming language used for development.
- tidyverse: A collection of R packages designed for data science.
- knitr and kableExtra: Packages for dynamic report generation in R.
- lubridate: For date-time manipulation.
- pagedown and staplr: Used for creating and manipulating PDF files.
- pdftools: For handling PDF files.
- GitHub Actions: Used for CI/CD processes.
- Docker: Containers are used in GitHub Actions workflows.
- devtools: An R package for development tasks.
- act: Local execution of GitHub Actions.
- actionlint: Static analysis tool for GitHub Actions workflows.
## Functionality
The repository hosts the AutoPayments project, an R package developed to automate the calculation and documentation of payments for METRC studies. The package facilitates:
- Generating detailed payment reports and creating corresponding PDF invoices for each study site.
- Handling data via stateless or stored methods to ensure flexibility in managing payment data.
- Customizing invoice templates to accommodate different study requirements.
## Relevant Skills
The codebase demonstrates advanced skills in several areas:
- Functional Programming in R: The use of `tidyverse` for data manipulation and `lubridate` for date-time calculations are prominent, reflecting a strong grasp of functional programming paradigms.
- PDF Manipulation: The use of `pagedown`, `staplr`, and `pdftools` to generate and manipulate PDF documents showcases proficiency in handling file formats programmatically.
- CI/CD Implementation: The implementation of GitHub Actions for continuous integration and deployment illustrates skills in automation and workflow optimization.
- Containerization: Using Docker within GitHub Actions indicates knowledge in software containerization, ensuring consistency across development environments.
Example of functional programming in R:
\`\`\`r
all_payments <- all_payments %>%
filter(DatePayment==format(Sys.Date(),"%m/%d/%Y"))
\`\`\`
This snippet uses `dplyr` from `tidyverse` to filter payment data, showcasing the application of chaining operations.
## Example Code
The use of Docker in GitHub Actions for running R scripts:
\`\`\`yaml
container:
image: eliaswf/jammy-chromedriver-python-r:latest
\`\`\`
This demonstrates integrating R within a Docker container setup, ensuring that the CI environment is consistent and controlled.
Example of PDF invoice generation using `staplr`:
\`\`\`r
set_fields(path, front_page, fields, flatten=TRUE)
\`\`\`
This function call modifies a PDF template to include dynamic content, illustrating the application of programming skills to document automation.
## Notable Achievements
- Optimization: The caching mechanism in the GitHub Actions workflows is an optimization that speeds up the CI process by reusing previously downloaded or built resources.
- Innovative Problem-Solving: The project includes a method for local testing of GitHub Actions (`act`), allowing developers to debug workflows locally without pushing numerous commits, demonstrating a practical solution to a common problem in CI/CD development.
- Customizable Outputs: The ability to customize invoice templates based on study-specific metadata provides a tailored user experience, which is crucial for client-facing applications.
These components not only reflect technical proficiency but also a thorough understanding of the project's domain-specific requirements, making them notable achievements in a software development context.