Skip to content

Commit 5754d62

Browse files
authored
Merge pull request #597 from eclipse-basyx/develop
Release 2.1.0
2 parents c128a52 + 92aa732 commit 5754d62

163 files changed

Lines changed: 7198 additions & 30719 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ jobs:
5353
# that you want to use to test the serialization adapter against.
5454
# Currently, we need to update this manually, however I'm afraid this is not possible to automatically infer,
5555
# since it's heavily dependant of the version of the AAS specification we support.
56-
AAS_SPECS_RELEASE_TAG: "IDTA-01001-3-0-1_schemasV3.0.8"
56+
AAS_SPECS_RELEASE_TAG: "IDTA-01001-3-1-2"
5757
services:
5858
couchdb:
5959
image: couchdb:3
@@ -203,7 +203,6 @@ jobs:
203203
chmod +x ./etc/scripts/set_copyright_year.sh
204204
./etc/scripts/set_copyright_year.sh --check
205205
206-
207206
compliance-tool-test:
208207
# This job runs the unittests on the python versions specified down at the matrix
209208
runs-on: ubuntu-latest
@@ -216,12 +215,17 @@ jobs:
216215

217216
steps:
218217
- uses: actions/checkout@v4
218+
with:
219+
# TODO(#592): revisit when the sdk<->compliance_tool version pinning is fixed.
220+
# Need tags so setuptools_scm builds the local sdk as >=1.0.0, else the loose
221+
# `basyx-python-sdk>=1.0.0` pin lets pip replace it with the PyPI release.
222+
fetch-depth: 0
219223
- name: Set up Python ${{ matrix.python-version }}
220224
uses: actions/setup-python@v5
221225
with:
222226
python-version: ${{ matrix.python-version }}
223227
- name: Install Python dependencies
224-
# install the local sdk in editable mode so it does not get overwritten
228+
# install the local sdk first so its version satisfies the >=1.0.0 pin and pip keeps it instead of PyPI
225229
run: |
226230
python -m pip install --upgrade pip
227231
python -m pip install ../sdk
@@ -243,12 +247,17 @@ jobs:
243247
working-directory: ./compliance_tool
244248
steps:
245249
- uses: actions/checkout@v4
250+
with:
251+
# TODO(#592): revisit when the sdk<->compliance_tool version pinning is fixed.
252+
# Need tags so setuptools_scm builds the local sdk as >=1.0.0, else the loose
253+
# `basyx-python-sdk>=1.0.0` pin lets pip replace it with the PyPI release.
254+
fetch-depth: 0
246255
- name: Set up Python ${{ env.X_PYTHON_MIN_VERSION }}
247256
uses: actions/setup-python@v5
248257
with:
249258
python-version: ${{ env.X_PYTHON_MIN_VERSION }}
250259
- name: Install Python dependencies
251-
# install the local sdk in editable mode so it does not get overwritten
260+
# install the local sdk first so its version satisfies the >=1.0.0 pin and pip keeps it instead of PyPI
252261
run: |
253262
python -m pip install --upgrade pip
254263
python -m pip install ../sdk
@@ -292,7 +301,7 @@ jobs:
292301

293302
defaults:
294303
run:
295-
working-directory: ./server/app
304+
working-directory: ./server
296305
steps:
297306
- uses: actions/checkout@v4
298307
- name: Set up Python ${{ env.X_PYTHON_MIN_VERSION }}
@@ -302,26 +311,26 @@ jobs:
302311
- name: Install Python dependencies
303312
run: |
304313
python -m pip install --upgrade pip
305-
python -m pip install ../../sdk
314+
python -m pip install ../sdk
306315
python -m pip install .[dev]
307316
- name: Check typing with MyPy
308317
run: |
309-
python -m mypy .
318+
python -m mypy app test
310319
- name: Check code style with PyCodestyle
311320
run: |
312-
python -m pycodestyle --count --max-line-length 120 .
321+
python -m pycodestyle --count --max-line-length 120 app test
313322
314-
server-package:
323+
server-repository-docker:
315324
# This job checks if we can build our server package
316325
runs-on: ubuntu-latest
317326
defaults:
318327
run:
319-
working-directory: ./server
328+
working-directory: ./server/docker/repository
320329
steps:
321330
- uses: actions/checkout@v4
322331
- name: Build the Docker image
323332
run: |
324-
docker build -t basyx-python-server -f Dockerfile ..
333+
docker build -t basyx-python-server -f Dockerfile ../../..
325334
- name: Run container
326335
run: |
327336
docker run -d --name basyx-python-server basyx-python-server

.github/workflows/release.yml

Lines changed: 110 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ on:
44
release:
55
types: [published]
66

7+
env:
8+
TARGET_PLATFORM: "linux/amd64,linux/arm/v7,linux/arm64"
9+
710
jobs:
811
sdk-publish:
912
# This job publishes the package to PyPI
@@ -59,7 +62,54 @@ jobs:
5962
with:
6063
password: ${{ secrets.PYPI_ORG_TOKEN }}
6164

62-
server-publish:
65+
server-repository-publish:
66+
# This job publishes the server docker image to DockerHub
67+
runs-on: ubuntu-latest
68+
defaults:
69+
run:
70+
working-directory: ./server
71+
steps:
72+
- name: Checkout Repository
73+
uses: actions/checkout@v4
74+
75+
- name: Extract Docker image metadata
76+
id: meta
77+
uses: docker/metadata-action@v5
78+
with:
79+
images: eclipsebasyx/basyx-python-repository
80+
# This fetches the latest git tag and adds an additional "latest" to it, so e.g. `2.1.0,latest`
81+
tags: |
82+
type=semver,pattern={{version}}
83+
type=raw,value=latest
84+
labels: |
85+
org.opencontainers.image.title=BaSyx Python Repository Service
86+
org.opencontainers.image.description=Eclipse BaSyx Python SDK - Repository HTTP Server
87+
org.opencontainers.image.source=https://github.com/eclipse-basyx/basyx-python-sdk/tree/main/server
88+
org.opencontainers.image.licenses=MIT
89+
90+
- name: Log in to Docker Hub
91+
uses: docker/login-action@v4
92+
with:
93+
username: ${{ secrets.DOCKER_HUB_USER }}
94+
password: ${{ secrets.DOCKER_HUB_TOKEN }}
95+
96+
- name: Setup QEMU
97+
uses: docker/setup-qemu-action@v4
98+
99+
- name: Set up Docker Buildx
100+
uses: docker/setup-buildx-action@v4
101+
102+
- name: Build and Push Repository Docker Image
103+
uses: docker/build-push-action@v6
104+
with:
105+
context: .
106+
file: ./server/docker/repository/Dockerfile
107+
platforms: ${{ env.TARGET_PLATFORM }}
108+
push: true
109+
tags: ${{ steps.meta.outputs.tags }}
110+
labels: ${{ steps.meta.outputs.labels }}
111+
112+
server-discovery-publish:
63113
# This job publishes the server docker image to DockerHub
64114
runs-on: ubuntu-latest
65115
defaults:
@@ -73,14 +123,14 @@ jobs:
73123
id: meta
74124
uses: docker/metadata-action@v5
75125
with:
76-
images: eclipsebasyx/basyx-python-server
126+
images: eclipsebasyx/basyx-python-discovery
77127
# This fetches the latest git tag and adds an additional "latest" to it, so e.g. `2.1.0,latest`
78128
tags: |
79129
type=semver,pattern={{version}}
80130
type=raw,value=latest
81131
labels: |
82-
org.opencontainers.image.title=BaSyx Python Server
83-
org.opencontainers.image.description=Eclipse BaSyx Python SDK - HTTP Server
132+
org.opencontainers.image.title=BaSyx Python Discovery Service
133+
org.opencontainers.image.description=Eclipse BaSyx Python SDK - Discovery HTTP Server
84134
org.opencontainers.image.source=https://github.com/eclipse-basyx/basyx-python-sdk/tree/main/server
85135
org.opencontainers.image.licenses=MIT
86136
@@ -90,11 +140,65 @@ jobs:
90140
username: ${{ secrets.DOCKER_HUB_USER }}
91141
password: ${{ secrets.DOCKER_HUB_TOKEN }}
92142

93-
- name: Build and Push Docker Image
143+
- name: Setup QEMU
144+
uses: docker/setup-qemu-action@v4
145+
146+
- name: Set up Docker Buildx
147+
uses: docker/setup-buildx-action@v4
148+
149+
- name: Build and Push Repository Docker Image
150+
uses: docker/build-push-action@v6
151+
with:
152+
context: .
153+
file: ./server/docker/discovery/Dockerfile
154+
platforms: ${{ env.TARGET_PLATFORM }}
155+
push: true
156+
tags: ${{ steps.meta.outputs.tags }}
157+
labels: ${{ steps.meta.outputs.labels }}
158+
159+
server-registry-publish:
160+
# This job publishes the server docker image to DockerHub
161+
runs-on: ubuntu-latest
162+
defaults:
163+
run:
164+
working-directory: ./server
165+
steps:
166+
- name: Checkout Repository
167+
uses: actions/checkout@v4
168+
169+
- name: Extract Docker image metadata
170+
id: meta
171+
uses: docker/metadata-action@v5
172+
with:
173+
images: eclipsebasyx/basyx-python-registry
174+
# This fetches the latest git tag and adds an additional "latest" to it, so e.g. `2.1.0,latest`
175+
tags: |
176+
type=semver,pattern={{version}}
177+
type=raw,value=latest
178+
labels: |
179+
org.opencontainers.image.title=BaSyx Python Registry Service
180+
org.opencontainers.image.description=Eclipse BaSyx Python SDK - Registry HTTP Server
181+
org.opencontainers.image.source=https://github.com/eclipse-basyx/basyx-python-sdk/tree/main/server
182+
org.opencontainers.image.licenses=MIT
183+
184+
- name: Log in to Docker Hub
185+
uses: docker/login-action@v4
186+
with:
187+
username: ${{ secrets.DOCKER_HUB_USER }}
188+
password: ${{ secrets.DOCKER_HUB_TOKEN }}
189+
190+
- name: Setup QEMU
191+
uses: docker/setup-qemu-action@v4
192+
193+
- name: Set up Docker Buildx
194+
uses: docker/setup-buildx-action@v4
195+
196+
- name: Build and Push Repository Docker Image
94197
uses: docker/build-push-action@v6
95198
with:
96199
context: .
97-
file: ./server/Dockerfile # Todo: Update paths
200+
file: ./server/docker/registry/Dockerfile
201+
platforms: ${{ env.TARGET_PLATFORM }}
98202
push: true
99203
tags: ${{ steps.meta.outputs.tags }}
100204
labels: ${{ steps.meta.outputs.labels }}

.gitignore

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,8 @@ compliance_tool/aas_compliance_tool/version.py
3232
server/app/version.py
3333

3434
# Ignore the content of the server storage
35-
server/input/
36-
server/storage/
35+
server/example_configurations/repository_standalone/input/
36+
server/example_configurations/repository_standalone/storage/
37+
server/example_configurations/registry_standalone/input/
38+
server/example_configurations/registry_standalone/storage/
39+
server/example_configurations/discovery_standalone/storage/

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2019-2022 the Eclipse BaSyx Authors
3+
Copyright (c) 2019-2026 the Eclipse BaSyx Authors
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

README.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ for Industry 4.0 Systems.
77

88
These are the implemented AAS specifications of the [current SDK release](https://github.com/eclipse-basyx/basyx-python-sdk/releases/latest), which can be also found on [PyPI](https://pypi.org/project/basyx-python-sdk/):
99

10-
| Specification | Version |
11-
|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
12-
| Part 1: Metamodel | [v3.0.1 (01001-3-0-1)](https://industrialdigitaltwin.org/wp-content/uploads/2024/06/IDTA-01001-3-0-1_SpecificationAssetAdministrationShell_Part1_Metamodel.pdf) |
13-
| Schemata (JSONSchema, XSD) | [v3.0.8 (IDTA-01001-3-0-1_schemasV3.0.8)](https://github.com/admin-shell-io/aas-specs/releases/tag/IDTA-01001-3-0-1_schemasV3.0.8) |
14-
| Part 2: API | [v3.0 (01002-3-0)](https://industrialdigitaltwin.org/en/wp-content/uploads/sites/2/2023/06/IDTA-01002-3-0_SpecificationAssetAdministrationShell_Part2_API_.pdf) |
15-
| Part 3a: Data Specification IEC 61360 | [v3.0 (01003-a-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01003-a-3-0_SpecificationAssetAdministrationShell_Part3a_DataSpecification_IEC61360.pdf) |
16-
| Part 5: Package File Format (AASX) | [v3.0 (01005-3-0)](https://industrialdigitaltwin.org/wp-content/uploads/2023/04/IDTA-01005-3-0_SpecificationAssetAdministrationShell_Part5_AASXPackageFileFormat.pdf) |
10+
| Specification | Version |
11+
|---------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
12+
| Part 1: Metamodel | [v3.1.2 (01001-3-1-2)](https://industrialdigitaltwin.io/aas-specifications/IDTA-01001/v3.1.2/index.html) |
13+
| Schemata (JSONSchema, XSD) | [v3.1.2 (IDTA-01001-3-1-2)](https://github.com/admin-shell-io/aas-specs-metamodel/releases/tag/v3.1.2) |
14+
| Part 2: API | [v3.1.1 (01002)](https://industrialdigitaltwin.org/en/wp-content/uploads/sites/2/2025/08/IDTA-01002-3-1-1_AAS-Specification_Part2_API.pdf) |
15+
| Part 3a: Data Specification IEC 61360 | [v3.1.1 (01003-a)](https://industrialdigitaltwin.org/wp-content/uploads/2025/08/IDTA-01003-a-3-1-1_AAS-Specification_Part3a_DataSpecification.pdf) |
16+
| Part 5: Package File Format (AASX) | [v3.1 (01005)](https://industrialdigitaltwin.org/wp-content/uploads/2025/06/IDTA_01005-25-01_AAS-Specification_Part5_AASXPackageFileFormat.pdf) |
17+
1718

1819
If you need support to an older version of the specifications, please refer to our [prior releases](https://github.com/eclipse-basyx/basyx-python-sdk/releases).
1920
Each of them has a similar table at the top of the release notes.
@@ -22,7 +23,7 @@ Each of them has a similar table at the top of the release notes.
2223
This repository is structured into separate packages.
2324
The `sdk` directory provides the AAS metamodel as Python objects and fundamental functionalities to handle AAS.
2425
The `server` implements a specification-compliant Docker HTTP server for AASs.
25-
The `compliance_tool` is to be determined.
26+
The `compliance_tool` is a command-line tool for checking whether JSON and XML files comply with the AAS specification.
2627

2728
* [SDK](./sdk/README.md):
2829
* Modelling of AASs as Python objects
@@ -35,6 +36,9 @@ The `compliance_tool` is to be determined.
3536
* [Server](./server/README.md): Docker Image of a specification compliant HTTP Server implementing the interfaces:
3637
* Asset Administration Shell Repository
3738
* Submodel Repository
39+
* Asset Administration Shell Registry Service
40+
* Submodel Registry Service
41+
* Discovery
3842
* [Compliance Tool](./compliance_tool/README.md): A command-line tool for checking compliance of JSON and XML files
3943
to the specification of the AAS
4044

compliance_tool/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,38 @@ Shell elements
1010
* check if the data in a given xml, json or aasx file is the same as the example data
1111
* check if two given xml, json or aasx files contain the same Asset Administration Shell elements in any order
1212

13+
## Installation
14+
15+
### Default installation
16+
Install the latest release from PyPI:
17+
18+
```bash
19+
pip install basyx-compliance-tool
20+
```
21+
22+
### Developer installation
23+
When working from a checkout of this repository, install the sibling SDK from the source tree *first*, then the
24+
compliance tool:
25+
26+
```bash
27+
pip install ./sdk
28+
pip install ./compliance_tool
29+
```
30+
31+
Installing the local SDK first is what lets the tool check against your in-development metamodel: `pip` keeps the
32+
already-installed local SDK instead of pulling a release from PyPI.
33+
34+
> [!IMPORTANT]
35+
> The compliance checks are only as current as the installed `basyx-python-sdk` — the tool reports compliance against
36+
> whatever metamodel version that SDK implements, not against the version named in this README. Because the dependency
37+
> is currently declared loosely (`basyx-python-sdk>=1.0.0`), `pip` will **not** replace an SDK that is already installed
38+
> and satisfies that constraint, even if it is older than the one you intend to test against. This happens silently, with
39+
> no error. To be sure you are checking against the intended metamodel, install or upgrade the SDK explicitly, e.g. the
40+
> local source tree with `pip install ./sdk` or a specific release with `pip install --upgrade "basyx-python-sdk==2.1.0"`.
41+
>
42+
> This manual version matching is a temporary workaround; see #592.
43+
44+
## Usage
1345
Invoking should work with either `python -m aas_compliance_tool.cli` or (when installed correctly and PATH is set
1446
correctly) with `aas-compliance-check` on the command line.
1547

0 commit comments

Comments
 (0)