Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
47fab24
docs: add Phase 0 audit of data provenance, dependencies, and defects
gavinrozzi Aug 24, 2026
55c5e99
test: add regression tests for zip_distance input ordering (#20)
gavinrozzi Aug 24, 2026
ca64595
fix: vectorize reverse_zipcode and geocode_zip preserving input order…
gavinrozzi Aug 24, 2026
5357c4b
refactor: replace raster with internal haversine distance (#21, #24, …
gavinrozzi Aug 24, 2026
ed9ec12
refactor: vendor Census FIPS table, drop tidycensus (#21, #24, #28)
gavinrozzi Aug 24, 2026
71951ee
refactor: drop tidyr, demote download-only deps to Suggests
gavinrozzi Aug 24, 2026
e0633aa
docs: add FAQ vignette; document data provenance and limitations (#13…
gavinrozzi Aug 24, 2026
3457e1e
ci: modernize GitHub Actions workflows to r-lib/actions v2
gavinrozzi Aug 24, 2026
e16e736
chore: bump version to 0.4.0, update NEWS, migrate CITATION to bibent…
gavinrozzi Aug 24, 2026
a50bf93
docs: stage draft issue comments for maintainer review
gavinrozzi Aug 24, 2026
aaf1fa4
docs: update README links to relocated documentation site
gavinrozzi Aug 24, 2026
bc25cf7
feat: add reproducible data pipeline under data-raw/
gavinrozzi Aug 24, 2026
4c6dec9
feat: add zip_data_version() and download_comprehensive_data()
gavinrozzi Aug 24, 2026
0d3bd81
data: refresh all datasets via the pipeline (#19, #25, #26, #29)
gavinrozzi Aug 24, 2026
6b95a96
ci: add quarterly data-refresh workflow; fix broken pkgdown install step
gavinrozzi Aug 24, 2026
b432d0e
docs: NEWS for the data refresh; stage issue comments for #19/#25/#26…
gavinrozzi Aug 24, 2026
36c6208
docs: update CLAUDE.md dataset counts for the refreshed data
gavinrozzi Aug 24, 2026
b8e3be8
fix: declare openssl in Suggests for the sha256 fallback
gavinrozzi Aug 24, 2026
2cf2727
perf: bounding-box prefilter for search_radius; input validation; sch…
gavinrozzi Aug 24, 2026
a8f3bc3
docs: add ROADMAP.md with release plan and standing policies
gavinrozzi Aug 24, 2026
92ea3b7
ci: install the preferably pkgdown template from GitHub
gavinrozzi Aug 24, 2026
071ba68
fix: address code-review findings across search_radius, zip_to_cd, an…
gavinrozzi Aug 24, 2026
a8a3b7a
fix: address second-round review findings
gavinrozzi Aug 24, 2026
9d3bd89
fix: address third-round review findings
gavinrozzi Aug 24, 2026
93aeeba
fix: address fourth-round review findings
gavinrozzi Aug 24, 2026
015fb4e
fix: address fifth-round review findings
gavinrozzi Aug 28, 2026
81d77cc
Restore legacy compatibility and add versioned NG API
gavinrozzi Aug 31, 2026
8f16b79
Resolve remaining open issue compatibility gaps
gavinrozzi Aug 31, 2026
609d163
Make data release archives deterministic
gavinrozzi Aug 31, 2026
5ea64f9
Enable verified 2026.08 data assets
gavinrozzi Aug 31, 2026
d184c16
Record completed release gates
gavinrozzi Aug 31, 2026
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
9 changes: 9 additions & 0 deletions .Rbuildignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,13 @@ paper.pdf$
^\.github$
^codecov\.yml$
^README\.Rmd$
^README\.html$
^CRAN-SUBMISSION$
^data-raw$
^AUDIT\.md$
^CLAUDE\.md$
^issue_comments$
^bench$
^ROADMAP\.md$
^ISSUE-RESOLUTION\.md$
^vignettes/.*\.html$
83 changes: 28 additions & 55 deletions .github/workflows/R-CMD-check.yaml
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
# For help debugging build failures open an issue on the RStudio community with the 'github-actions' tag.
# https://community.rstudio.com/new-topic?category=Package%20development&tags=github-actions
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
on:
push:
branches:
- main
- master
branches: [main, master]
pull_request:
branches:
- main
- master
branches: [main, master]

name: R-CMD-check

permissions: read-all

jobs:
R-CMD-check:
runs-on: ${{ matrix.config.os }}
Expand All @@ -22,65 +19,41 @@ jobs:
fail-fast: false
matrix:
config:
- {os: macos-latest, r: 'release'}
- {os: windows-latest, r: 'release'}
- {os: macOS-latest, r: 'release'}
- {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
- {os: ubuntu-latest, r: 'devel', http-user-agent: 'release'}
- {os: ubuntu-latest, r: 'release'}
- {os: ubuntu-latest, r: 'oldrel-1'}

env:
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true
RSPM: ${{ matrix.config.rspm }}
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
R_KEEP_PKG_SOURCE: yes

steps:
- uses: actions/checkout@v2

- uses: r-lib/actions/setup-r@v1
- uses: actions/checkout@v4
with:
r-version: ${{ matrix.config.r }}

- uses: r-lib/actions/setup-pandoc@v1
fetch-depth: 0

- name: Query dependencies
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: r-lib/actions/setup-pandoc@v2

- name: Restore R package cache
if: runner.os != 'Windows'
uses: actions/cache@v2
- uses: r-lib/actions/setup-r@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
if: runner.os == 'Linux'
run: |
while read -r cmd
do
eval sudo $cmd
done < <(Rscript -e 'writeLines(remotes::system_requirements("ubuntu", "20.04"))')
r-version: ${{ matrix.config.r }}
http-user-agent: ${{ matrix.config.http-user-agent }}
use-public-rspm: true

- name: Install dependencies
run: |
remotes::install_deps(dependencies = TRUE)
remotes::install_cran("rcmdcheck")
shell: Rscript {0}
- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::rcmdcheck
needs: check

- name: Check
- name: Exact zipcodeR 0.3.5 differential gate
env:
_R_CHECK_CRAN_INCOMING_REMOTE_: false
run: |
options(crayon.enabled = TRUE)
rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "warning", check_dir = "check")
shell: Rscript {0}
ZIPCODER_BASELINE_REF: origin/master
run: Rscript tools/compatibility-check.R

- name: Upload check results
if: failure()
uses: actions/upload-artifact@main
- uses: r-lib/actions/check-r-package@v2
with:
name: ${{ runner.os }}-r${{ matrix.config.r }}-results
path: check
args: 'c("--no-manual", "--as-cran")'
upload-snapshots: true
build_args: 'c("--no-manual", "--compact-vignettes=gs+qpdf")'
8 changes: 2 additions & 6 deletions .github/workflows/pkgdown.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,9 @@ jobs:

- uses: r-lib/actions/setup-r-dependencies@v2
with:
extra-packages: any::pkgdown, local::.
# the preferably pkgdown template is no longer on CRAN; install from GitHub
extra-packages: any::pkgdown, github::amirmasoudabdol/preferably, local::.
needs: website

- name: Install dependencies
run: |
remotes::install_deps(dependencies = TRUE)
install.packages(c("pkgdown","preferably"), type = "binary")

- name: Build site
run: pkgdown::build_site_github_pages(new_process = FALSE, install = FALSE)
Expand Down
84 changes: 84 additions & 0 deletions .github/workflows/refresh-data.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
name: data-assets

on:
workflow_dispatch:
inputs:
mode:
description: Inspect upstream sources or rebuild an already-pinned release
required: true
type: choice
options: [refresh, rebuild]
data_version:
description: Explicit immutable data version (for example 2026.08)
required: true
type: string
build_timestamp:
description: Explicit ISO-8601 build timestamp
required: true
type: string

permissions:
contents: read

jobs:
data-assets:
runs-on: ubuntu-latest
env:
CENSUS_API_KEY: ${{ secrets.CENSUS_API_KEY }}
PIPELINE_DATA_VERSION: ${{ inputs.data_version }}
PIPELINE_PROPOSED_VERSION: ${{ inputs.data_version }}
PIPELINE_BUILD_TIMESTAMP: ${{ inputs.build_timestamp }}
PIPELINE_BASELINE_REF: master
PIPELINE_MODE: ${{ inputs.mode }}

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

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

- name: Restore the pinned pipeline library
run: |
echo "762ec8acc2d2ccbe5a217859c846c2de83254e3948112b437dde7a0ad5b15999 data-raw/vendor/pak_0.11.1.tar.gz" | sha256sum --check
R CMD INSTALL data-raw/vendor/pak_0.11.1.tar.gz
Rscript -e 'pak::lockfile_install("data-raw/pkg.lock")'

- name: Inspect upstream source bytes
if: inputs.mode == 'refresh'
run: Rscript data-raw/refresh_sources.R

- name: Upload source-refresh proposal for human review
if: inputs.mode == 'refresh'
uses: actions/upload-artifact@v4
with:
name: source-refresh-${{ inputs.data_version }}
path: data-raw/refresh-candidate/${{ inputs.data_version }}/
if-no-files-found: error

- name: Deterministic rebuild, pass one
if: inputs.mode == 'rebuild'
run: |
Rscript data-raw/run_pipeline.R
sha256sum \
data-raw/release/zipcodeR-data-${{ inputs.data_version }}.rds \
data-raw/release/manifest-${{ inputs.data_version }}.json \
data-raw/release/zipcodeR-reproducibility-${{ inputs.data_version }}.tar.gz \
> /tmp/first.sha256

- name: Deterministic rebuild, pass two
if: inputs.mode == 'rebuild'
run: |
Rscript data-raw/run_pipeline.R
sha256sum --check /tmp/first.sha256

- name: Upload unpublished release candidates
if: inputs.mode == 'rebuild'
uses: actions/upload-artifact@v4
with:
name: zipcodeR-data-${{ inputs.data_version }}-unpublished
path: data-raw/release/
if-no-files-found: error
55 changes: 55 additions & 0 deletions .github/workflows/test-coverage.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]

name: test-coverage

permissions: read-all

jobs:
test-coverage:
runs-on: ubuntu-latest
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}

steps:
- uses: actions/checkout@v4

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

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

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

- uses: codecov/codecov-action@v4
with:
# Fail if error if not on PR, or if on PR and token is given
fail_ci_if_error: ${{ github.event_name != 'pull_request' || secrets.CODECOV_TOKEN }}
files: ./cobertura.xml
plugins: noop
disable_search: true
token: ${{ secrets.CODECOV_TOKEN }}

- name: Show testthat output
if: always()
run: |
## --------------------------------------------------------------------
find '${{ runner.temp }}/package' -name 'testthat.Rout*' -exec cat '{}' \; || true
shell: bash
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
.Rhistory
.DS_Store
README.knit.md
README.html
vignettes/*.html
Loading
Loading