From 427eb957eb4c0e567b75e4718d88f803ad230f25 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Fri, 28 Aug 2026 18:03:57 -0700 Subject: [PATCH 1/3] Migrate to test item framework Migrate tests and CI to the test item framework, remove PkgButler, bump min Julia to 1.12, and modernize repo infrastructure. Co-Authored-By: Claude Fable 5 --- .github/dependabot.yml | 10 +++++ .../workflows/jlpkgbutler-butler-workflow.yml | 20 ---------- .../jlpkgbutler-ci-master-workflow.yml | 40 ------------------- .../workflows/jlpkgbutler-ci-pr-workflow.yml | 38 ------------------ .../jlpkgbutler-codeformat-pr-workflow.yml | 21 ---------- .../jlpkgbutler-compathelper-workflow.yml | 19 --------- .../jlpkgbutler-docdeploy-workflow.yml | 21 ---------- .../workflows/jlpkgbutler-tagbot-workflow.yml | 13 ------ .github/workflows/juliaci.yml | 17 ++++++++ .gitignore | 4 ++ .jlpkgbutler.toml | 1 - LICENSE.md | 2 +- Project.toml | 7 ++-- README.md | 3 +- docs/Project.toml | 2 +- docs/make.jl | 3 +- test/array/test_broadcast.jl | 5 +-- test/array/test_constructors.jl | 5 +-- test/array/test_datavaluematrix.jl | 6 +-- test/array/test_datavaluevector.jl | 5 +-- test/array/test_indexing.jl | 8 ++-- test/array/test_primitives.jl | 5 +-- test/array/test_reduce.jl | 6 +-- test/array/test_show.jl | 5 +-- test/array/test_typedefs.jl | 5 +-- test/runtests.jl | 39 ++++++++---------- test/scalar/test_basederived.jl | 6 +-- test/scalar/test_broadcast.jl | 5 +-- test/scalar/test_core.jl | 8 ++-- test/scalar/test_operations.jl | 6 +-- test/test_setup.jl | 9 +++++ 31 files changed, 86 insertions(+), 258 deletions(-) create mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/jlpkgbutler-butler-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-ci-master-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-ci-pr-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-codeformat-pr-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-compathelper-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-docdeploy-workflow.yml delete mode 100644 .github/workflows/jlpkgbutler-tagbot-workflow.yml create mode 100644 .github/workflows/juliaci.yml delete mode 100644 .jlpkgbutler.toml create mode 100644 test/test_setup.jl diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..4e00cd8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "julia" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" \ No newline at end of file diff --git a/.github/workflows/jlpkgbutler-butler-workflow.yml b/.github/workflows/jlpkgbutler-butler-workflow.yml deleted file mode 100644 index f7894d9..0000000 --- a/.github/workflows/jlpkgbutler-butler-workflow.yml +++ /dev/null @@ -1,20 +0,0 @@ -name: Run the Julia Package Butler - -on: - push: - branches: - - master - schedule: - - cron: '0 */1 * * *' - -jobs: - butler: - name: "Run Package Butler" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: davidanthoff/julia-pkgbutler@releases/v1 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - ssh-private-key: ${{ secrets.JLPKGBUTLER_TOKEN }} - channel: stable diff --git a/.github/workflows/jlpkgbutler-ci-master-workflow.yml b/.github/workflows/jlpkgbutler-ci-master-workflow.yml deleted file mode 100644 index 0615a7e..0000000 --- a/.github/workflows/jlpkgbutler-ci-master-workflow.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Run CI on master - -on: - push: - branches: - - master - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: ['1.0', '1.1', '1.2', '1.3', '1.4', '1.5'] - julia-arch: [x64, x86] - os: [ubuntu-latest, windows-latest, macOS-latest] - exclude: - - os: macOS-latest - julia-arch: x86 - - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.julia-version }} - arch: ${{ matrix.julia-arch }} - - uses: julia-actions/julia-buildpkg@latest - env: - PYTHON: "" - - uses: julia-actions/julia-runtest@latest - env: - PYTHON: "" - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v1 - with: - file: ./lcov.info - flags: unittests - name: codecov-umbrella - fail_ci_if_error: false - token: ${{ secrets.CODECOV_TOKEN }} - \ No newline at end of file diff --git a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml b/.github/workflows/jlpkgbutler-ci-pr-workflow.yml deleted file mode 100644 index a47670e..0000000 --- a/.github/workflows/jlpkgbutler-ci-pr-workflow.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Run CI on PR - -on: - pull_request: - types: [opened, synchronize, reopened] - -jobs: - test: - runs-on: ${{ matrix.os }} - strategy: - matrix: - julia-version: ['1.0', '1.1', '1.2', '1.3', '1.4', '1.5'] - julia-arch: [x64, x86] - os: [ubuntu-latest, windows-latest, macOS-latest] - exclude: - - os: macOS-latest - julia-arch: x86 - - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/setup-julia@latest - with: - version: ${{ matrix.julia-version }} - arch: ${{ matrix.julia-arch }} - - uses: julia-actions/julia-buildpkg@latest - env: - PYTHON: "" - - uses: julia-actions/julia-runtest@latest - env: - PYTHON: "" - - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v1 - with: - file: ./lcov.info - flags: unittests - name: codecov-umbrella - fail_ci_if_error: false - token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml b/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml deleted file mode 100644 index f1252a0..0000000 --- a/.github/workflows/jlpkgbutler-codeformat-pr-workflow.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Code Formatting - -on: - push: - branches: - - master - -jobs: - format: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/julia-codeformat@releases/v1 - - name: Create Pull Request - uses: peter-evans/create-pull-request@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - commit-message: Format files using DocumentFormat - title: '[AUTO] Format files using DocumentFormat' - body: '[DocumentFormat.jl](https://github.com/julia-vscode/DocumentFormat.jl) would suggest these formatting changes' - labels: no changelog diff --git a/.github/workflows/jlpkgbutler-compathelper-workflow.yml b/.github/workflows/jlpkgbutler-compathelper-workflow.yml deleted file mode 100644 index e41d211..0000000 --- a/.github/workflows/jlpkgbutler-compathelper-workflow.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: Run CompatHelper - -on: - schedule: - - cron: '00 * * * *' - issues: - types: [opened, reopened] - -jobs: - compathelper: - name: "Run CompatHelper.jl" - runs-on: ubuntu-latest - steps: - - name: Pkg.add("CompatHelper") - run: julia -e 'using Pkg; Pkg.add("CompatHelper")' - - name: CompatHelper.main() - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: julia -e 'using CompatHelper; CompatHelper.main()' diff --git a/.github/workflows/jlpkgbutler-docdeploy-workflow.yml b/.github/workflows/jlpkgbutler-docdeploy-workflow.yml deleted file mode 100644 index de5c6b9..0000000 --- a/.github/workflows/jlpkgbutler-docdeploy-workflow.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Deploy documentation - -on: - push: - branches: - - master - tags: - - v* - -jobs: - docdeploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: julia-actions/julia-buildpkg@latest - env: - PYTHON: "" - - uses: julia-actions/julia-docdeploy@releases/v1 - env: - DOCUMENTER_KEY: ${{ secrets.JLPKGBUTLER_TOKEN }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/jlpkgbutler-tagbot-workflow.yml b/.github/workflows/jlpkgbutler-tagbot-workflow.yml deleted file mode 100644 index 8c6b404..0000000 --- a/.github/workflows/jlpkgbutler-tagbot-workflow.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: TagBot -on: - schedule: - - cron: 0 * * * * -jobs: - TagBot: - runs-on: ubuntu-latest - steps: - - uses: JuliaRegistries/TagBot@v1 - with: - token: ${{ secrets.GITHUB_TOKEN }} - ssh: ${{ secrets.JLPKGBUTLER_TOKEN }} - branches: true diff --git a/.github/workflows/juliaci.yml b/.github/workflows/juliaci.yml new file mode 100644 index 0000000..6aa24b5 --- /dev/null +++ b/.github/workflows/juliaci.yml @@ -0,0 +1,17 @@ +name: Julia CI + +on: + push: {branches: [main,master]} + pull_request: {types: [opened,synchronize,reopened,ready_for_review,converted_to_draft]} + issue_comment: {types: [created]} + workflow_dispatch: {inputs: {feature: {type: choice, description: What to run, options: [DocDeploy,LintAndTest,TagBot]}}} + +jobs: + julia-ci: + uses: julia-testitems/testitem-workflow/.github/workflows/juliaci.yml@v2 + with: + include-all-compatible-minor-versions: true + include-rc-versions: true + permissions: write-all + secrets: + codecov_token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index cc1e1ae..97b5a14 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ deps/ops.jl docs/build .vscode lcov.info +docs/build/ +docs/Manifest.toml +test-output*.* +Manifest.toml diff --git a/.jlpkgbutler.toml b/.jlpkgbutler.toml deleted file mode 100644 index b72304f..0000000 --- a/.jlpkgbutler.toml +++ /dev/null @@ -1 +0,0 @@ -template = "bach" diff --git a/LICENSE.md b/LICENSE.md index 6bfa9c7..6e0e2a2 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The DataValues.jl package is licensed under the MIT "Expat" License: -> Copyright (c) 2016-2019: David Anthoff. +> Copyright (c) 2016-2026: David Anthoff. > > > Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Project.toml b/Project.toml index 1f090a7..cb967b3 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "DataValues" uuid = "e7dc6d0d-1eca-5fa6-8ad6-5aecde8b7ea5" -version = "0.4.14-DEV" +version = "0.5.0-DEV" [deps] DataValueInterfaces = "e2d170a0-9d28-54be-80f0-106bbe20a464" @@ -8,13 +8,14 @@ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" [compat] DataValueInterfaces = "1.0" -julia = "1" +julia = "1.12" [extras] +TestItemRunner = "f8b46487-2199-4994-9208-9a1283c18c0a" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Test", "InteractiveUtils", "LinearAlgebra", "Random"] +test = ["Test", "InteractiveUtils", "LinearAlgebra", "Random", "TestItemRunner"] diff --git a/README.md b/README.md index 9b77a42..3f8f1ea 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ # DataValues [![Project Status: Active - The project has reached a stable, usable state and is being actively developed.](http://www.repostatus.org/badges/latest/active.svg)](http://www.repostatus.org/#active) -[![Build Status](https://travis-ci.org/queryverse/DataValues.jl.svg?branch=master)](https://travis-ci.org/queryverse/DataValues.jl) -[![Build status](https://ci.appveyor.com/api/projects/status/nkd83orhu4xm68yp/branch/master?svg=true)](https://ci.appveyor.com/project/queryverse/datavalues-jl/branch/master) +[![Build Status](https://github.com/queryverse/DataValues.jl/actions/workflows/juliaci.yml/badge.svg?branch=main)](https://github.com/queryverse/DataValues.jl/actions/workflows/juliaci.yml) [![codecov](https://codecov.io/gh/queryverse/DataValues.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/queryverse/DataValues.jl) ## Overview diff --git a/docs/Project.toml b/docs/Project.toml index 0554468..be2fba1 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -3,4 +3,4 @@ Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DataValues = "e7dc6d0d-1eca-5fa6-8ad6-5aecde8b7ea5" [compat] -Documenter = "~0.24" +Documenter = "1" diff --git a/docs/make.jl b/docs/make.jl index 7a1e06d..8115616 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -2,7 +2,8 @@ using Documenter, DataValues makedocs(modules=[DataValues], sitename="DataValues.jl", - analytics="UA-132838790-1", + format = Documenter.HTML(analytics = "UA-132838790-1"), + warnonly = [:missing_docs], pages=[ "Introduction" => "index.md" ]) diff --git a/test/array/test_broadcast.jl b/test/array/test_broadcast.jl index 0b67e74..a65c7f8 100644 --- a/test/array/test_broadcast.jl +++ b/test/array/test_broadcast.jl @@ -1,7 +1,4 @@ -using DataValues -using Test - -@testset "DataValueArray: Broadcast" begin +@testitem "DataValueArray: Broadcast" begin A1 = rand(Int, 10) M1 = rand(Bool, 10) diff --git a/test/array/test_constructors.jl b/test/array/test_constructors.jl index ac3cd2d..c906201 100644 --- a/test/array/test_constructors.jl +++ b/test/array/test_constructors.jl @@ -1,7 +1,4 @@ -using Test -using DataValues - -@testset "DataValueArray: Constructor" begin +@testitem "DataValueArray: Constructor" begin # test Inner Constructor @test_throws ArgumentError DataValueArray([1, 2, 3, 4], [true, false, true]) diff --git a/test/array/test_datavaluematrix.jl b/test/array/test_datavaluematrix.jl index 4c90e85..1971bfe 100644 --- a/test/array/test_datavaluematrix.jl +++ b/test/array/test_datavaluematrix.jl @@ -1,8 +1,6 @@ -using DataValues -using LinearAlgebra -using Test +@testitem "DataValueArray: DataMatrix" begin -@testset "DataValueArray: DataMatrix" begin + using LinearAlgebra # ----- test Base.diag -----# diff --git a/test/array/test_datavaluevector.jl b/test/array/test_datavaluevector.jl index 55b2d19..451fc9f 100644 --- a/test/array/test_datavaluevector.jl +++ b/test/array/test_datavaluevector.jl @@ -1,7 +1,4 @@ -using DataValues -using Test - -@testset "DataValueArray: DataVector" begin +@testitem "DataValueArray: DataVector" begin A = [1:10...] B = [1:5...] diff --git a/test/array/test_indexing.jl b/test/array/test_indexing.jl index 835edad..568ebd6 100644 --- a/test/array/test_indexing.jl +++ b/test/array/test_indexing.jl @@ -1,9 +1,7 @@ -using Test -using Random -using DataValues -# import DataValues: unsafe_getindex_notnull, unsafe_getvalue_notnull +@testitem "DataValueArray: Indexing" begin -@testset "DataValueArray: Indexing" begin + using Random +# import DataValues: unsafe_getindex_notnull, unsafe_getvalue_notnull x = DataValueArray{Int}((5, 2)) diff --git a/test/array/test_primitives.jl b/test/array/test_primitives.jl index 49472b4..7fe9baf 100644 --- a/test/array/test_primitives.jl +++ b/test/array/test_primitives.jl @@ -1,7 +1,4 @@ -using Test -using DataValues - -@testset "DataValueArray: Primitives" begin +@testitem "DataValueArray: Primitives" begin n = rand(1:5) siz = [ rand(2:5) for i in n ] diff --git a/test/array/test_reduce.jl b/test/array/test_reduce.jl index 6f205e8..103aec5 100644 --- a/test/array/test_reduce.jl +++ b/test/array/test_reduce.jl @@ -1,8 +1,6 @@ -using DataValues -using Random -using Test +@testitem "DataValueArray: Reduce" begin -@testset "DataValueArray: Reduce" begin + using Random Random.seed!(1) f(x) = 5 * x diff --git a/test/array/test_show.jl b/test/array/test_show.jl index afe4b7f..74309cc 100644 --- a/test/array/test_show.jl +++ b/test/array/test_show.jl @@ -1,7 +1,4 @@ -using Test -using DataValues - -@testset "DataValueArray: Show" begin +@testitem "DataValueArray: Show" begin io = IOBuffer() disp = TextDisplay(IOBuffer()) diff --git a/test/array/test_typedefs.jl b/test/array/test_typedefs.jl index aec3c75..2cbd65b 100644 --- a/test/array/test_typedefs.jl +++ b/test/array/test_typedefs.jl @@ -1,7 +1,4 @@ -using Test -using DataValues - -@testset "DataValueArray: TypeDefs" begin +@testitem "DataValueArray: TypeDefs" begin x = DataValueArray([1, 2, 3], [false, false, true]) diff --git a/test/runtests.jl b/test/runtests.jl index c9f62c5..57aa948 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,29 +1,22 @@ -using DataValues -using Test +using TestItemRunner -mutable struct TestNType{T} - v::DataValue{T} -end +include("test_setup.jl") -@enum TestEnum enum_val_a enum_val_b +include("scalar/test_core.jl") +include("scalar/test_operations.jl") +include("scalar/test_basederived.jl") +include("scalar/test_broadcast.jl") -@testset "DataValues" begin - - include("scalar/test_core.jl") - include("scalar/test_operations.jl") - include("scalar/test_basederived.jl") - include("scalar/test_broadcast.jl") - - include("array/test_broadcast.jl") - include("array/test_constructors.jl") - include("array/test_indexing.jl") +include("array/test_broadcast.jl") +include("array/test_constructors.jl") +include("array/test_indexing.jl") # include("array/test_map.jl") - include("array/test_datavaluematrix.jl") - include("array/test_datavaluevector.jl") - include("array/test_primitives.jl") - include("array/test_reduce.jl") - include("array/test_show.jl") +include("array/test_datavaluematrix.jl") +include("array/test_datavaluevector.jl") +include("array/test_primitives.jl") +include("array/test_reduce.jl") +include("array/test_show.jl") # include("array/test_subarray.jl") - include("array/test_typedefs.jl") +include("array/test_typedefs.jl") -end +@run_package_tests diff --git a/test/scalar/test_basederived.jl b/test/scalar/test_basederived.jl index 173e768..7d98c49 100644 --- a/test/scalar/test_basederived.jl +++ b/test/scalar/test_basederived.jl @@ -1,7 +1,5 @@ -using DataValues -using Test - -@testset "Base derived tests" begin +@testitem "Base derived tests" setup=[DVFixtures] begin + using Dates types = [ Bool, diff --git a/test/scalar/test_broadcast.jl b/test/scalar/test_broadcast.jl index a22f55c..01e285b 100644 --- a/test/scalar/test_broadcast.jl +++ b/test/scalar/test_broadcast.jl @@ -1,7 +1,4 @@ -using DataValues -using Test - -@testset "Broadcast" begin +@testitem "Broadcast" begin dv1 = DataValue(3) dv2 = DataValue(5) diff --git a/test/scalar/test_core.jl b/test/scalar/test_core.jl index 3d8a9c7..0fa4186 100644 --- a/test/scalar/test_core.jl +++ b/test/scalar/test_core.jl @@ -1,9 +1,7 @@ -using DataValues -using Test -using Dates -using InteractiveUtils +@testitem "Core" setup=[DVFixtures] begin -@testset "Core" begin + using Dates + using InteractiveUtils @testset "Missing integration" begin diff --git a/test/scalar/test_operations.jl b/test/scalar/test_operations.jl index d9626da..f9b730b 100644 --- a/test/scalar/test_operations.jl +++ b/test/scalar/test_operations.jl @@ -1,8 +1,6 @@ -using DataValues -using Test -using Dates +@testitem "Operations" begin -@testset "Operations" begin + using Dates time_a = DataValue("14:00:00") date_a = DataValue("01/01/2012") diff --git a/test/test_setup.jl b/test/test_setup.jl new file mode 100644 index 0000000..7ea75c4 --- /dev/null +++ b/test/test_setup.jl @@ -0,0 +1,9 @@ +@testsnippet DVFixtures begin + +mutable struct TestNType{T} + v::DataValue{T} +end + +@enum TestEnum enum_val_a enum_val_b + +end From 06b587ec6a2fa50230aaa7d9de87b0df7d614478 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Fri, 28 Aug 2026 18:20:55 -0700 Subject: [PATCH 2/3] Bump version to 1.0.0-DEV Move the package off 0.x to a proper 1.0 major version, and accept 1.0 versions of Queryverse sibling packages in compat. Co-Authored-By: Claude Fable 5 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index cb967b3..74a063c 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "DataValues" uuid = "e7dc6d0d-1eca-5fa6-8ad6-5aecde8b7ea5" -version = "0.5.0-DEV" +version = "1.0.0-DEV" [deps] DataValueInterfaces = "e2d170a0-9d28-54be-80f0-106bbe20a464" From 1e81d38dd71af03909499e52dd2822de460f6613 Mon Sep 17 00:00:00 2001 From: David Anthoff Date: Fri, 28 Aug 2026 21:02:08 -0700 Subject: [PATCH 3/3] Restore original Julia compat range Keep supporting the Julia versions the package supported before the test item migration instead of raising the floor to 1.12. Co-Authored-By: Claude Fable 5 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 74a063c..4b7deba 100644 --- a/Project.toml +++ b/Project.toml @@ -8,7 +8,7 @@ Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" [compat] DataValueInterfaces = "1.0" -julia = "1.12" +julia = "1" [extras] TestItemRunner = "f8b46487-2199-4994-9208-9a1283c18c0a"