Skip to content

Commit 6121872

Browse files
committed
feat!: rename package from PURL.jl to PackageURL.jl
BREAKING CHANGE: Module and type names have changed - Module: PURL → PackageURL - Type: PackageURL → PURL (avoids module/type collision) Migration: using PURL → using PackageURL parse(PackageURL, s) → parse(PURL, s) PackageURL("npm", ...) → PURL("npm", ...) This rename satisfies Julia General Registry AutoMerge requirements (minimum 5 characters, proper CamelCase) and aligns with the PURL ecosystem naming convention (packageurl-python, packageurl-js, etc.).
1 parent d90e39b commit 6121872

28 files changed

+409
-430
lines changed

.github/workflows/Documentation.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@ jobs:
4747
shell: julia --project=docs --color=yes {0}
4848
run: |
4949
using Documenter: DocMeta, doctest
50-
using PURL
51-
DocMeta.setdocmeta!(PURL, :DocTestSetup, :(using PURL); recursive=true)
52-
doctest(PURL)
50+
using PackageURL
51+
DocMeta.setdocmeta!(PackageURL, :DocTestSetup, :(using PackageURL); recursive=true)
52+
doctest(PackageURL)

CHANGELOG.md

Lines changed: 39 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,63 @@
11
# Changelog
22

3-
All notable changes to PURL.jl will be documented in this file.
3+
All notable changes to PackageURL.jl will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

88
## [Unreleased]
99

10+
## [0.4.0] - 2026-02-04
11+
12+
### Changed
13+
14+
- **BREAKING**: Renamed package from `PURL.jl` to `PackageURL.jl` for Julia General Registry compliance
15+
- **BREAKING**: Renamed module from `PURL` to `PackageURL`
16+
- **BREAKING**: Renamed struct from `PackageURL` to `PURL` to avoid module/type naming collision
17+
18+
### Migration Guide
19+
20+
To migrate from PURL.jl (pre-1.0) to PackageURL.jl (1.0+):
21+
22+
```julia
23+
# Before (PURL.jl)
24+
using PURL
25+
purl = parse(PackageURL, "pkg:npm/lodash@4.17.21")
26+
purl = PackageURL("npm", nothing, "lodash", "4.17.21", nothing, nothing)
27+
28+
# After (PackageURL.jl)
29+
using PackageURL
30+
purl = parse(PURL, "pkg:npm/lodash@4.17.21")
31+
purl = PURL("npm", nothing, "lodash", "4.17.21", nothing, nothing)
32+
```
33+
34+
Summary of changes:
35+
1. Change `using PURL` to `using PackageURL`
36+
2. Change `parse(PackageURL, ...)` to `parse(PURL, ...)`
37+
3. Change `tryparse(PackageURL, ...)` to `tryparse(PURL, ...)`
38+
4. Change `PackageURL(...)` constructor to `PURL(...)`
39+
1040
### Added
11-
- Initial implementation of PURL.jl
12-
- `PackageURL` struct for representing Package URLs
41+
- Initial implementation of PackageURL.jl
42+
- `PURL` struct for representing Package URLs
1343
- `PURLError` exception type for parsing and validation errors
14-
- `parse(PackageURL, s)` for parsing PURL strings
15-
- `tryparse(PackageURL, s)` for safe parsing
44+
- `parse(PURL, s)` for parsing PURL strings
45+
- `tryparse(PURL, s)` for safe parsing
1646
- `string(purl)` for serializing to canonical PURL format
1747
- `purl"..."` string macro for compile-time validated literals
1848
- Support for all PURL components: type, namespace, name, version, qualifiers, subpath
1949
- Percent encoding/decoding per PURL specification
2050
- Type-specific validation rules for Julia, npm, PyPI ecosystems
2151
- Official PURL test suite integration
2252
- Comprehensive documentation with Documenter.jl
23-
- Bundle official purl-spec v1.0.0 as Julia artifact with all 35 type definitions
53+
- Bundle official purl-spec v0.4.0 as Julia artifact with all 35 type definitions
2454
- `purl_spec_path()`, `type_definitions_path()`, `test_fixtures_path()` functions for accessing bundled files
2555
- `load_bundled_type_definitions!()` for loading official type definitions (called automatically on module load)
2656

27-
### Changed
28-
- Nothing yet
29-
30-
### Deprecated
31-
- Nothing yet
32-
33-
### Removed
34-
- Nothing yet
35-
3657
### Fixed
3758
- Julia UUID validation now strictly validates RFC 4122 format (8-4-4-4-12 hex digits with hyphens)
3859
- NuGet package names are now correctly normalized to lowercase for PURL canonical form
3960

40-
### Security
41-
- Nothing yet
42-
4361
## [0.1.0] - Unreleased
4462

4563
### Added
@@ -49,5 +67,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
4967
- Serialize PURLs to canonical string format
5068
- String macro for PURL literals
5169

52-
[Unreleased]: https://github.com/JuliaLang/PURL.jl/compare/v0.1.0...HEAD
53-
[0.1.0]: https://github.com/JuliaLang/PURL.jl/releases/tag/v0.1.0
70+
[Unreleased]: https://github.com/s-celles/PackageURL.jl/compare/v0.4.0...HEAD
71+
[0.4.0]: https://github.com/s-celles/PackageURL.jl/compare/v0.1.0...v0.4.0
72+
[0.1.0]: https://github.com/s-celles/PackageURL.jl/releases/tag/v0.1.0

CONTRIBUTING.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Contributing to PURL.jl
1+
# Contributing to PackageURL.jl
22

3-
Thank you for your interest in contributing to PURL.jl! This document provides guidelines and information for contributors.
3+
Thank you for your interest in contributing to PackageURL.jl! This document provides guidelines and information for contributors.
44

55
## Getting Started
66

@@ -13,8 +13,8 @@ Thank you for your interest in contributing to PURL.jl! This document provides g
1313

1414
1. Clone the repository:
1515
```bash
16-
git clone https://github.com/s-celles/PURL.jl.git
17-
cd PURL.jl
16+
git clone https://github.com/s-celles/PackageURL.jl.git
17+
cd PackageURL.jl
1818
```
1919

2020
2. Start Julia with the project:
@@ -132,10 +132,10 @@ end
132132
## Project Structure
133133

134134
```
135-
PURL.jl/
135+
PackageURL.jl/
136136
├── src/
137-
│ ├── PURL.jl # Main module
138-
│ ├── types.jl # Core types (PackageURL, PURLError)
137+
│ ├── PackageURL.jl # Main module
138+
│ ├── types.jl # Core types (PURL, PURLError)
139139
│ ├── parse.jl # Parsing implementation
140140
│ ├── serialize.jl # String conversion
141141
│ ├── encoding.jl # Percent encoding/decoding
@@ -154,7 +154,7 @@ PURL.jl/
154154

155155
## Type Definition Maintenance
156156

157-
PURL.jl uses official type definitions from the [purl-spec](https://github.com/package-url/purl-spec) repository. These definitions follow the ECMA-427 schema.
157+
PackageURL.jl uses official type definitions from the [purl-spec](https://github.com/package-url/purl-spec) repository. These definitions follow the ECMA-427 schema.
158158

159159
### Updating Type Definitions
160160

@@ -183,7 +183,7 @@ When new types are added to purl-spec:
183183

184184
3. Verify the type loads correctly:
185185
```julia
186-
using PURL
186+
using PackageURL
187187
def = load_type_definition("data/type_definitions/newtype.json")
188188
```
189189

@@ -225,7 +225,7 @@ The Julia PURL type was added via [purl-spec#540](https://github.com/package-url
225225
Example Julia PURLs:
226226
```
227227
pkg:julia/Dates@1.9.0?uuid=ade2ca70-3891-5945-98fb-dc099432e06a
228-
pkg:julia/PURL@0.1.0?uuid=c2271b70-7219-4bda-bcc3-62ec08ead5b7
228+
pkg:julia/PackageURL@0.4.0?uuid=c2271b70-7219-4bda-bcc3-62ec08ead5b7
229229
```
230230

231231
## Adding Support for New PURL Types
@@ -283,4 +283,4 @@ julia --project=docs -e 'using Pkg; Pkg.instantiate(); include("docs/make.jl")'
283283

284284
## License
285285

286-
By contributing to PURL.jl, you agree that your contributions will be licensed under the MIT License.
286+
By contributing to PackageURL.jl, you agree that your contributions will be licensed under the MIT License.

Project.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
name = "PURL"
1+
name = "PackageURL"
22
uuid = "c2271b70-7219-4bda-bcc3-62ec08ead5b7"
3-
version = "0.3.2"
4-
authors = ["PURL.jl Contributors"]
3+
version = "0.4.0"
4+
authors = ["PackageURL.jl Contributors"]
55

66
[deps]
77
JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1"

README.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,29 @@
1-
# PURL.jl
1+
# PackageURL.jl
22

3-
[![Build Status](https://github.com/s-celles/PURL.jl/actions/workflows/CI.yml/badge.svg)](https://github.com/s-celles/PURL.jl/actions/workflows/CI.yml)
4-
[![Documentation](https://img.shields.io/badge/docs-dev-blue.svg)](https://s-celles.github.io/PURL.jl/dev)
5-
[![Coverage](https://codecov.io/gh/s-celles/PURL.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/s-celles/PURL.jl)
3+
[![Build Status](https://github.com/s-celles/PackageURL.jl/actions/workflows/CI.yml/badge.svg)](https://github.com/s-celles/PackageURL.jl/actions/workflows/CI.yml)
4+
[![Documentation](https://img.shields.io/badge/docs-dev-blue.svg)](https://s-celles.github.io/PackageURL.jl/dev)
5+
[![Coverage](https://codecov.io/gh/s-celles/PackageURL.jl/branch/main/graph/badge.svg)](https://codecov.io/gh/s-celles/PackageURL.jl)
66

77
A pure-Julia implementation of the [Package URL (PURL)](https://github.com/package-url/purl-spec) specification ([ECMA-427](https://www.ecma-international.org/publications-and-standards/standards/ecma-427/)).
88

9-
**[Documentation](https://s-celles.github.io/PURL.jl/dev)** | **[API Reference](https://s-celles.github.io/PURL.jl/dev/api/)**
9+
**[Documentation](https://s-celles.github.io/PackageURL.jl/dev)** | **[API Reference](https://s-celles.github.io/PackageURL.jl/dev/api/)**
1010

1111
## Installation
1212

1313
```julia
1414
using Pkg
15-
Pkg.add(url="https://github.com/s-celles/PURL.jl") # until unregistered
16-
# Pkg.add("PURL") # when registered to General registry
15+
Pkg.add("PackageURL")
1716
```
1817

1918
The package includes all 35 official PURL type definitions from [purl-spec v1.0.0](https://github.com/package-url/purl-spec/releases/tag/v1.0.0), bundled as a Julia artifact. Type definitions are automatically loaded when you first use the package.
2019

2120
## Quick Start
2221

2322
```julia
24-
using PURL
23+
using PackageURL
2524

2625
# Parse a PURL string
27-
purl = parse(PackageURL, "pkg:npm/lodash@4.17.21")
26+
purl = parse(PURL, "pkg:npm/lodash@4.17.21")
2827
purl.type # "npm"
2928
purl.name # "lodash"
3029
purl.version # "4.17.21"
@@ -36,7 +35,7 @@ purl = purl"pkg:pypi/requests@2.28.0"
3635
string(purl) # "pkg:pypi/requests@2.28.0"
3736
```
3837

39-
See the [documentation](https://s-celles.github.io/PURL.jl/dev) for PURL components, ecosystem examples, and API reference.
38+
See the [documentation](https://s-celles.github.io/PackageURL.jl/dev) for PURL components, ecosystem examples, and API reference.
4039

4140
## License
4241

ROADMAP.md

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# PURL.jl Roadmap
1+
# PackageURL.jl Roadmap
22

3-
This document outlines the development status and future plans for PURL.jl.
3+
This document outlines the development status and future plans for PackageURL.jl.
44

55
## Current Status
66

7-
PURL.jl aims for full compliance with ECMA-427 (1st edition, December 2025). The implementation passes the official purl-spec test suite and correctly handles the core PURL format.
7+
PackageURL.jl aims for full compliance with ECMA-427 (1st edition, December 2025). The implementation passes the official purl-spec test suite and correctly handles the core PURL format.
88

99
### ECMA-427 Compliance Status
1010

@@ -17,7 +17,7 @@ PURL.jl aims for full compliance with ECMA-427 (1st edition, December 2025). The
1717
| 5.6.3 | Encode namespace segments individually | Implemented |
1818
| 6 | Type Definition Schema Support | Implemented |
1919

20-
**Note:** Full compliance verification is pending for v0.4.0 release.
20+
**Note:** Full compliance verification is pending for v0.5.0 release.
2121

2222
### Completed Features
2323

@@ -49,46 +49,43 @@ Additional types can be added via JSON type definitions without code changes.
4949

5050
## Version History
5151

52-
### v0.2.0 - Full ECMA-427 Compliance ✓
53-
- [x] Fix scheme slash handling
54-
- [x] Fix type character validation
55-
- [x] Fix colon encoding
56-
- [x] Fix empty qualifier handling
57-
- [x] Fix namespace segment encoding
58-
- [x] Add compliance test cases
52+
### v0.4.0 - Package Rename and Initial Release ✓
53+
- [x] Renamed package from PURL.jl to PackageURL.jl for Julia General Registry compliance
54+
- [x] Renamed module from PURL to PackageURL
55+
- [x] Renamed struct from PackageURL to PURL (to avoid module/type collision)
56+
- [x] Full ECMA-427 compliance
57+
- [x] All 35 official type definitions bundled
58+
59+
### v0.3.2 - Official Type Test Coverage ✓
60+
- [x] All 37 official purl-spec type definitions verified to load correctly
61+
- [x] Normalization derivation tests
62+
- [x] Qualifier extraction tests
63+
- [x] JSONSchema validation against official purl-type-definition schema
64+
65+
### v0.3.1 - Official Type Definition Format Support ✓
66+
- [x] Support official ECMA-427 type definition schema format from purl-spec repository
5967

6068
### v0.3.0 - Extended Type Support ✓
6169
- [x] Add maven type rules
6270
- [x] Add nuget type rules
6371
- [x] Add golang type rules
6472
- [x] JSON-based type definition loading (Feature 007)
6573

66-
### v0.3.1 - Official Type Definition Format Support ✓
67-
- [x] Support official ECMA-427 type definition schema format from purl-spec repository
68-
- Parse `name_definition.case_sensitive` → lowercase normalization
69-
- Parse `name_definition.normalization_rules` text patterns
70-
- Parse `qualifiers_definition` array format
71-
- [x] Test against official purl-spec type definitions (cargo, pypi, npm, maven, etc.)
72-
73-
### v0.3.2 - Official Type Test Coverage ✓
74-
- [x] All 37 official purl-spec type definitions verified to load correctly
75-
- [x] Normalization derivation tests:
76-
- 15 lowercase types verified (alpm, apk, bitbucket, bitnami, composer, deb, github, golang, hex, luarocks, npm, oci, otp, pub, pypi)
77-
- 22 case-sensitive types verified (bazel, cargo, cocoapods, conan, conda, cpan, cran, docker, gem, generic, hackage, huggingface, julia, maven, mlflow, nuget, opam, qpkg, rpm, swid, swift, yocto)
78-
- pypi underscore replacement verified
79-
- [x] Qualifier extraction tests (maven, pypi, julia, swid)
80-
- [x] JSONSchema validation against official purl-type-definition schema
81-
- 34 types pass schema validation
82-
- 3 types have upstream schema issues (bazel, julia, yocto) - see UPSTREAM-ISSUES.md
83-
- [x] CONTRIBUTING.md with type definition maintenance guide
74+
### v0.2.0 - Full ECMA-427 Compliance ✓
75+
- [x] Fix scheme slash handling
76+
- [x] Fix type character validation
77+
- [x] Fix colon encoding
78+
- [x] Fix empty qualifier handling
79+
- [x] Fix namespace segment encoding
80+
- [x] Add compliance test cases
8481

8582
---
8683

8784
## Upcoming
8885

89-
### v0.4.0 - Release Candidate
90-
- [ ] Complete documentation
91-
- [ ] API documentation review
86+
### v0.5.0 - Post-Release Improvements
87+
- [ ] Complete documentation review
88+
- [ ] API documentation audit
9289
- [ ] Performance optimization if needed
9390
- [ ] Final test coverage review
9491

0 commit comments

Comments
 (0)