Models, mappings, and vocabularies for the NYPL Core ontology.
v2.23
NYPL-Core contains vocabularies and mappings that control many different components across the Library Services Platform. It's important to follow these guidelines to reduce risk of unintended effects downstream.
- Cut a feature branch from
master
with your intended change. - If modifying
./vocabularies
, make your edits to the CSVs and then update the JSON-LD files using the included./vocabularies/scripts
- (If modifying
./mappings
, you can just edit the JSONs directly.) - Update README.md with the new version number (e.g. "v1.33")
- Add an entry to CHANGELOG.md summarizing the changes
- Commit your changes.
- Create a pre-release tag using the next logical version number (e.g.
v1.33a
. See Working with Git tags) - Git push and create a PR
- If it's a change in
./vocabularies
include avalidate-changes
report in your PR (e.g. if changinglocations.json
, runcd vocabularies/scripts; python validate-changes.py locations
)
Think about what components are affected by the change. For changes to ./mappings
, you should consider the impact on components in the Discovery data pipeline. (Presumably you're making changes specifically for that pipeline.) For some ./vocabularies
changes (e.g. changes to locations.json
or recapCustomerCodes.json
) the components impacted are too many to independently test. At a minimum, you should check the following components:
- Verify that nypl-core-objects is able to parse your changes (e.g. to build local mappings files based on your pre-release tag of 1.33a, run
NYPL_CORE_VERSION=v1.33a npm run build-mappings
inside that repo) - Verify that the specific component(s) for which you're making the change pick up the change...
The method by which you verify an NYPL-Core change in an app depends on how the app includes NYPL-Core.
- For Node apps using
nypl-core-objects
, you should be able to setNYPL_CORE_VERSION=v1.33a
to tell it to use your pre-release version. - For (typically non-Node) components that draw on S3-hosted lookup files (e.g. by_sierra_location.json, you may test your change by first deploying your pre-release vocab to the QA S3 bucket and then using the QA version of the S3-hosted file to verify your changes.
Note that beanstalk apps may need to be "Restart"ed to pick up env config changes.
After 1) PR signoff and 2) confirming that your changes don't create trouble for nypl-core-objects or other immediately impacted apps, proceed to publish.
- Merge your PR and delete feature branch.
- Commit your changes
- Add a release tag (e.g.
v1.33
. See Working with Git tags) - Push to master
- If you made changes to
./vocabularies
:- Follow the instructions in nypl-core-objects "Pushing to S3" to push updated JSONs to S3 (for use by non-Node apps).
- If there are Node apps that need your update, update their
NYPL_CORE_VERSION
to your new version (e.g.v1.33
)
We tend to tag version numbers starting with "v1.0.0". NYPL-Core diverges from that by only specifying major and minor precision (e.g. v1.33).
To create a tag:
git tag -a v1.33
To create a "pre-release tag" (i.e. an unofficial version number tag published for the purpose of testing):
git tag -a v1.33a
After creating a pre-release tag (or any other tag), if you want to add additional commits to the tag (essentially reassign what the tag is an alias for), you'll need to force it:
git tag -a v1.33a -f
All tags you create must be pushed to origin after pushing your commits:
git push --tags
If you recently reassigned a pre-release tag, you'll need to force push:
git push --tags -f
Sometimes multiple features are vying for the next release version. If, when creating your pre-release tag, another active PR has already pushed code using that pre-release tag, you may create a second pre-release tag (e.g. v1.33b
). You may arrange to eventually merge both features into the final release. Or only one feature may be rolled out under the version number and the other feature will have to take the next logical version number.
There are three different sources of truth for determining deliverableTo
: Sierra ILS, Recap customer codes,
and M2 customer codes. locations.csv
contains all Sierra locations, which includes M2 and Recap locations.
M2 and Recap location codes are governed by different deliverability rules than other materials. These have no
deliverableTo
listed in locations.csv
because their deliverableTo
is instead maintained in m2CustomerCodes.csv
and recapCustomerCodes.csv
, respectively. To make it explicit where deliverableTo
should be resolved, we have
a property per code called deliverableToResolution
, which indicates if that information should be found in
locations, m2CustomerCodes, or recapCustomerCodes csvs.