Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
da58bc0
README: what it does, how to install it and where it came from (#26)
jwrosewell Nov 3, 2026
99217cd
Check that only rc merges into the default branch (#29)
jwrosewell Nov 3, 2026
9ffbcf8
Point links to the archived Java repositories at their folders here (…
jwrosewell Nov 3, 2026
5ac0cd4
Drop the moved example folders and fix the native model example name …
jwrosewell Nov 3, 2026
edbf8fc
Link this repository from the native library message and the demo pag…
jwrosewell Nov 3, 2026
6b2a9de
Link the hardware profile engine to its specification page (#34)
jwrosewell Nov 3, 2026
ebb595b
Merged Pull Request '#36 update-packages/rc->rc: Update packages'
Automation51D Nov 4, 2026
282fc0b
Merged Pull Request '#35 update-submodules/rc->rc: Update submodules'
Automation51D Nov 4, 2026
ce87fef
Merge main into rc after the 4 November release
jwrosewell Nov 4, 2026
0da326d
Use the data repository for the examples, tests and CI (#37)
jwrosewell Nov 4, 2026
82cc6a7
Say in AGENTS.md how to get the data, build and run the examples (#41)
jwrosewell Nov 4, 2026
086322c
Point package metadata at this repository and fix stale links (#42)
jwrosewell Nov 4, 2026
3773238
Describe the rc approach to releases in AGENTS.md (#39)
jwrosewell Nov 4, 2026
59e13f1
Check the callback URL before the JavaScript builder writes it (#40)
jwrosewell Nov 4, 2026
68101da
Close every FlowData, Pipeline and metadata collection, and fail the …
jwrosewell Nov 4, 2026
470efa6
Merge main into rc after release #45
jwrosewell Nov 4, 2026
4d36bac
Merged Pull Request '#46 update-packages/rc->rc: Update packages'
Automation51D Nov 5, 2026
9b859ab
Merged Pull Request '#38 update-submodules/rc->rc: Update submodules'
Automation51D Nov 5, 2026
66cc2dc
Allow only http and https in the callback URL, and test the zone and …
jwrosewell Nov 5, 2026
1aaaf70
Share only the evidence usage sharing accepts, as .NET does (#51)
jwrosewell Nov 7, 2026
7b5c70f
Run every example on the free data files, and show what needs the Ent…
jwrosewell Nov 7, 2026
80233d4
Run the copyright update once a year (#52)
ben51degrees Nov 7, 2026
d4abce9
Run the Selenium contract tests against the on-premise web example to…
ben51degrees Nov 7, 2026
2299507
Run the IP Intelligence cloud tests again, and let a property have no…
ben51degrees Nov 7, 2026
6353cb4
Store a data file's future before its check can read it (#71)
jwrosewell Nov 8, 2026
c781d83
Fail the example cloud tests when there is no resource key (#66)
jwrosewell Nov 8, 2026
3bedce5
Default IP Intelligence to the Balanced performance profile (#69)
jwrosewell Nov 9, 2026
62f7ed8
Add the random delay before an available update as seconds (#74)
jwrosewell Nov 9, 2026
142615d
Merged Pull Request '#76 update-example-assets/rc->rc: Update example…
Automation51D Nov 9, 2026
63d0bb8
Refuse a 51Did text with white space inside it, or both base64 alphab…
jwrosewell Nov 9, 2026
c8ffde8
Use LowMemory in the IP Intelligence examples built for the Enterpris…
jwrosewell Nov 9, 2026
68538b8
Build the Translation Engine from a configuration file, as .NET does …
jwrosewell Nov 9, 2026
5caede0
Add every component's drift for Drift, as the specification says (#60)
ben51degrees Nov 9, 2026
7299688
Accept no Evidence for usage sharing, and give it the whole web reque…
jwrosewell Nov 9, 2026
65bbf25
Test that a cloud engine whose product the resource key lacks builds …
jwrosewell Nov 9, 2026
50c4c42
Build a cloud engine whose product the resource key lacks, log that o…
jwrosewell Nov 9, 2026
c72baac
Test that the Cloud Request Engine discovers when it is built, and re…
jwrosewell Nov 9, 2026
b92cfcf
Let common-ci set the versions, find the bundle and collect the unit …
ben51degrees Nov 9, 2026
a4b6fd5
Discover when the Cloud Request Engine is built, and retry on first u…
jwrosewell Nov 9, 2026
4defa2a
Let a Cloud Request Engine be built from a kept copy of what an earli…
jwrosewell Nov 9, 2026
4f62134
Test that discovery makes both requests at once, times out after 2 se…
jwrosewell Nov 9, 2026
bef79b0
Make the discovery requests at once, time out after 2 seconds by defa…
jwrosewell Nov 9, 2026
be26bcf
Test that the SetHeaders element keeps its configuration once every e…
jwrosewell Nov 9, 2026
9f35ac9
Keep the SetHeaders element's configuration once every element has lo…
jwrosewell Nov 9, 2026
ea5fc04
Give the SetHeaders test mocks their type parameters, as the build tr…
jwrosewell Nov 9, 2026
f600e1d
Mark the mocked product map unchecked, as the build treats the vararg…
jwrosewell Nov 9, 2026
efbeed0
Mark the mocked product map unchecked, as the build treats the vararg…
jwrosewell Nov 9, 2026
33a13fe
Mark the mocked product map unchecked, as the build treats the vararg…
jwrosewell Nov 9, 2026
c309b58
Merge #84's test fix into #86
jwrosewell Nov 9, 2026
8f709b4
Stub the product map once per call, so no varargs array is created
jwrosewell Nov 9, 2026
40452b7
Test that a 408 or 429 at discovery is transient and does not fail th…
jwrosewell Nov 9, 2026
7bc481c
Treat a 408 or 429 at discovery as transient, so it does not fail the…
jwrosewell Nov 9, 2026
059c0df
Check the callback URL as the specification's six rules say (#77)
jwrosewell Nov 9, 2026
9846076
Write the usage sharing record as the specification says (#81)
jwrosewell Nov 9, 2026
726204b
Revert "Treat a 408 or 429 at discovery as transient, so it does not …
jwrosewell Nov 9, 2026
19cc0fa
Revert "Test that a 408 or 429 at discovery is transient and does not…
jwrosewell Nov 9, 2026
dba6b9a
Test that a missing product is a warning and a missing response part …
jwrosewell Nov 10, 2026
5e2553c
Log a missing product as a warning, and treat a missing response part…
jwrosewell Nov 10, 2026
1e1dae8
Test that a 408 at discovery fails the build, as every 4xx does
jwrosewell Nov 10, 2026
127b173
Test that a 4xx at discovery fails the build when its body is not JSON
jwrosewell Nov 10, 2026
7d4cebd
Keep the status of a cloud answer whose body is not JSON
jwrosewell Nov 10, 2026
97d7e45
Close a projected ring by copying its first point to its last (#87)
jwrosewell Nov 10, 2026
30b38b9
Wait for the watcher's update in the watcher test, not the polling ti…
jwrosewell Nov 10, 2026
222a380
Say in the Element Data documentation that an instance is not written…
jwrosewell Nov 10, 2026
9fced9b
Rewrap the findProduct Javadoc paragraph
jwrosewell Nov 10, 2026
7bf7192
List the Iterations match metric before Method, as the specification'…
jwrosewell Nov 10, 2026
fc55341
Show a license key only by its last 4 characters in logs and error me…
jwrosewell Nov 10, 2026
66326a3
Merge rc, which now holds the license key masking, into eager discovery
jwrosewell Nov 10, 2026
5a6fc84
Merge the missing product change at 9fced9b into eager discovery
jwrosewell Nov 10, 2026
0db9c2e
Merge pull request #84 from 51Degrees/fix/cloud-engine-missing-product
jwrosewell Nov 10, 2026
24c6f25
Write weighted values with the lower-case keys rawweighting and value…
jwrosewell Nov 10, 2026
8a19907
Merge rc into fix/cloud-request-engine-eager-discovery
jwrosewell Nov 10, 2026
6870059
Refresh the engine once when a data update is applied in memory (#92)
jwrosewell Nov 10, 2026
ccc2f8e
Merge pull request #86 from 51Degrees/fix/cloud-request-engine-eager-…
jwrosewell Nov 10, 2026
ff6e4c0
Send only the Evidence the cloud accepts from the Cloud Request Engin…
jwrosewell Nov 10, 2026
d39b6af
Give a null in the Location cloud response no value, with its nullrea…
jwrosewell Nov 10, 2026
c77fb05
Merged Pull Request '#103 update-submodules/rc->rc: Update submodules'
Automation51D Nov 11, 2026
1c2c578
Register the data file again after a refresh from a watched file, so …
jwrosewell Nov 11, 2026
f2e3981
Add switches and paths to the web integration, and Element Data to th…
jwrosewell Nov 11, 2026
ddb7d04
Send every Evidence value but the reserved names in the cloud request…
jwrosewell Nov 11, 2026
ce406b2
Refuse the Window property names the specification lists as the objec…
jwrosewell Nov 11, 2026
c99c661
Read property values by index for an engine built with property names…
jwrosewell Nov 11, 2026
d4d4dc6
Make every cloud test call the live service and fail when it cannot (…
ben51degrees Nov 11, 2026
a2d6cdd
Share a repeated evidence set at most once in each interval (#61)
jwrosewell Nov 11, 2026
cf7e5e2
Pause usage sharing sends after repeated failures (#62)
jwrosewell Nov 11, 2026
bf66e3d
Show the root logo in every README, link the main contributing guide,…
jwrosewell Nov 11, 2026
4bd6c3f
Give the specification's JSON Builder error text with no sequence num…
jwrosewell Nov 11, 2026
528e0df
Give the pipeline developer examples the test resource key (#108)
jwrosewell Nov 11, 2026
c34b30d
Move cxx to the 51degrees-cxx release 4.5.105 and read by index on an…
jwrosewell Nov 11, 2026
9c17f01
Make the data update follow the specification (#79)
jwrosewell Nov 11, 2026
53ccddd
Give every environment variable one _51DEGREES_ name (#105)
jwrosewell Nov 11, 2026
03c3dd9
Send one Evidence name once, whatever its letter case, by precedence …
jwrosewell Nov 11, 2026
4bec158
Authenticate a Cloud Request Engine on a license key alone, and send …
jwrosewell Nov 11, 2026
6034fa4
Take the session id and the sequence from the Sequence Element's data…
jwrosewell Nov 11, 2026
2f6ab51
Use the standard licence text in one LICENSE, and take the schema fro…
jwrosewell Nov 12, 2026
9a66888
Name the data update logging test's key so it is not an old variable …
jwrosewell Nov 12, 2026
6644140
Set the licence key field the live 51Did test reads (#113)
jwrosewell Nov 12, 2026
0b9257f
Take the free data files from the run's asset cache (#114)
jwrosewell Nov 12, 2026
36c153d
Keep reading the old cloud endpoint name and bring back its constants…
jwrosewell Nov 12, 2026
ef34a03
Ask the IP Intelligence benchmark only for the property it reads (#117)
jwrosewell Nov 12, 2026
551d916
Usage sharing finds its values once a call, without copying the Evide…
jwrosewell Nov 13, 2026
4f7be9b
Run the file system watcher on its own setting (#119)
jwrosewell Nov 13, 2026
d99b7ac
Update submodules (#121)
Automation51D Nov 13, 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
Binary file added .github/images/logo-160.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 12 additions & 7 deletions .github/workflows/cloud-51did.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,20 @@ name: Cloud 51Did Tests
# Runs the live cloud 51Did integration test (pipeline/pipeline.did,
# DidClientLiveTests) once for every _51DEGREES_RESOURCE_KEY* key passed in
# below. Each run sets the single _51DEGREES_RESOURCE_KEY the test reads.
# Only keys that carry the fodid product are passed in, because the tests ask
# the cloud for a 51Did and fail, saying so, when a key gets an answer with no
# identifier in it. That is entitlement working rather than a fault.
#
# The secrets are named one by one rather than passed as toJSON(secrets).
# GitHub marks a workflow that hands every secret to a step as possibly
# malicious and holds each run for manual approval, so the nightly never ran.
# A new resource key therefore needs a line here as well as the organisation
# secret.
#
# The test skips itself when no key is set, so a run with no secrets is green
# and proves nothing. That is deliberate, because a pull request from a fork
# has no secrets, and it is the reason the loop below reports which key each
# run used.
# A run with no key available fails. A cloud test that passes without
# calling the cloud reports success having proved nothing, and that is worse
# than a red job. A pull request from a fork gets no secrets, so run this
# workflow from a branch in this repository.

on:
workflow_dispatch:
Expand Down Expand Up @@ -51,7 +54,6 @@ jobs:
- name: Cloud 51Did test for each resource key secret
shell: pwsh
env:
_51DEGREES_RESOURCE_KEY_BASIC: ${{ vars._51DEGREES_RESOURCE_KEY_BASIC }}
_51DEGREES_RESOURCE_KEY_BESPOKE: ${{ secrets._51DEGREES_RESOURCE_KEY_BESPOKE }}
_51DEGREES_RESOURCE_KEY_51DID: ${{ vars._51DEGREES_RESOURCE_KEY_51DID }}
# Without a license key the tests that redeem a sealed verdict skip.
Expand All @@ -63,8 +65,11 @@ jobs:
$keys = Get-ChildItem env: |
Where-Object { $_.Name -like '_51DEGREES_RESOURCE_KEY*' -and $_.Value }
if (-not $keys) {
Write-Host 'No _51DEGREES_RESOURCE_KEY* secrets available; skipping.'
exit 0
throw ('No _51DEGREES_RESOURCE_KEY* secret is available, so the ' +
'live 51Did tests cannot call the cloud service. The keys ' +
'carry the fodid product these tests need. A pull request ' +
'from a fork gets no secrets, so run this workflow from a ' +
'branch in this repository.')
}
$failed = $false
foreach ($k in $keys) {
Expand Down
30 changes: 30 additions & 0 deletions .github/workflows/environment-variable-names.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
name: Environment variable names

on:
pull_request:
push:
branches:
- main
- rc
workflow_dispatch:

permissions:
contents: read

jobs:
environment-variable-names:
name: No tracked file names a variable starting with a digit or an old name
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
persist-credentials: false

- name: Test the check
shell: pwsh
run: Invoke-Pester -Path ./ci/check-environment-variable-names.Tests.ps1 -CI

- name: Check the names
shell: pwsh
run: ./ci/check-environment-variable-names.ps1
4 changes: 2 additions & 2 deletions .github/workflows/monthly-copyright-update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ on:
type: boolean
default: false
schedule:
# * is a special character in YAML so quote this string
- cron: '0 0 1 * *'
# The copyright year only changes once a year, so this runs on 1 January.
- cron: '0 0 1 1 *'

jobs:
Monthly_Copyright_Update:
Expand Down
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@
path = pipeline/owid-java
url = https://github.com/SWAN-community/owid-java.git
branch = main
[submodule "pipeline/pipeline.core/configuration-validation"]
path = pipeline/pipeline.core/configuration-validation
url = ../configuration-validation
11 changes: 7 additions & 4 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ java -cp examples/ip-intelligence/console/target/ip-intelligence-java-examples.c
```

The example downloads the Lite file first when it is not there. In place of
the argument, the `51DEGREES_IPI_PATH` environment variable or system property
the argument, the `_51DEGREES_IPI_PATH` environment variable or system property
can give the absolute path of a data file that is already there.

On Java 24 or later, add `--enable-native-access=ALL-UNNAMED` before the class
Expand Down Expand Up @@ -183,7 +183,7 @@ java -cp examples/device-detection/console/target/device-detection-java-examples

It prints the same `Input values:` and `Results:` blocks as the on-premise
example. The IP Intelligence cloud examples read their key from
`51DEGREES_RESOURCE_KEY` first and `TestResourceKey` second, and
`_51DEGREES_RESOURCE_KEY` first and `TestResourceKey` second, and
`examples/ip-intelligence/README.md` gives the keys to create for them.

### Pitfalls
Expand Down Expand Up @@ -246,8 +246,11 @@ from wherever Maven is run. Do not add a `.mvn` folder below the root.

Those folders are the data repository, a submodule of cxx, where each free
data file is a `<file>.link` until `get-data-files.ps1` or `get-data-files.sh`
downloads it. `ci/fetch-assets.ps1` runs the script, and the examples'
`DataFileHelper.findDataFile` runs it for a file that is missing. Look for a
downloads it. In CI, `ci/fetch-assets.ps1` puts every file there from
common-ci's assets, which each run caches once, so no test job downloads a
data file. A file added to the data repository needs an entry in
common-ci's `steps/fetch-assets.ps1` before CI can use it. The examples'
`DataFileHelper.findDataFile` runs the script for a file that is missing. Look for a
free file by its folder and name, such as
`device-detection/51Degrees-LiteV4.1.hash`, so the search does not stop at a
file of the same name elsewhere, such as a Git LFS pointer in an old
Expand Down
5 changes: 3 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# Contributing

If you wish to contribute to this project, please see the shared 51Degrees
[guidance](https://github.com/51Degrees/common-ci/blob/main/CONTRIBUTING.md).
Contributions are welcome. The [51Degrees contributing guide](https://github.com/51Degrees/.github/blob/main/CONTRIBUTING.md)
explains where a change goes and how to propose it. It applies to every
package in this repository.
Loading
Loading