Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add event_manifest.yml and a script to generate it #353

Merged
merged 2 commits into from
Jun 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 2022 Axis Communications AB.
# Copyright 2022-2023 Axis Communications AB.
# For a full list of individual contributors, please see the commit history.
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -37,6 +37,9 @@ jobs:

steps:
- uses: actions/checkout@v2
with:
# We need to fetch the tags too.
fetch-depth: 0

- name: Install dependencies
run: pip install -r requirements.txt
Expand Down
12 changes: 8 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 2022 Axis Communications AB.
# Copyright 2022-2023 Axis Communications AB.
# For a full list of individual contributors, please see the commit history.
#
# Licensed under the Apache License, Version 2.0 (the "License");
Expand All @@ -14,15 +14,19 @@
# limitations under the License.

.PHONY: all
all: generate_docs generate_schemas
all: generate_docs generate_manifest generate_schemas

# The generate_docs and generate_schemas goals assume that all Python
# package dependencies are available, e.g. via a virtualenv.
# The generate_* goals assume that all Python package dependencies are
# available, e.g. via a virtualenv.

.PHONY: generate_docs
generate_docs:
./generate_docs.py definitions/Eiffel*Event/*.yml

.PHONY: generate_manifest
generate_manifest:
./generate_manifest.py > event_manifest.yml

.PHONY: generate_schemas
generate_schemas:
./generate_schemas.py definitions/Eiffel*Event/*.yml
188 changes: 188 additions & 0 deletions event_manifest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
---
- name: Bordeaux
tag: edition-bordeaux
release_date: '2017-04-12'
events:
EiffelActivityCanceledEvent: 1.0.0
EiffelActivityFinishedEvent: 1.0.0
EiffelActivityStartedEvent: 1.0.0
EiffelActivityTriggeredEvent: 1.0.0
EiffelAnnouncementPublishedEvent: 1.0.0
EiffelArtifactCreatedEvent: 1.0.0
EiffelArtifactPublishedEvent: 1.0.0
EiffelArtifactReusedEvent: 1.0.0
EiffelCompositionDefinedEvent: 1.0.0
EiffelConfidenceLevelModifiedEvent: 1.0.0
EiffelEnvironmentDefinedEvent: 1.0.0
EiffelFlowContextDefinedEvent: 1.0.0
EiffelIssueVerifiedEvent: 1.0.0
EiffelSourceChangeCreatedEvent: 1.0.0
EiffelSourceChangeSubmittedEvent: 1.0.0
EiffelTestCaseCanceledEvent: 1.0.0
EiffelTestCaseFinishedEvent: 1.0.0
EiffelTestCaseStartedEvent: 1.0.0
EiffelTestCaseTriggeredEvent: 1.0.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 1.0.0
EiffelTestSuiteFinishedEvent: 1.0.0
EiffelTestSuiteStartedEvent: 1.0.0
- name: Toulouse
tag: edition-toulouse
release_date: '2018-02-20'
events:
EiffelActivityCanceledEvent: 1.1.0
EiffelActivityFinishedEvent: 1.1.0
EiffelActivityStartedEvent: 1.1.0
EiffelActivityTriggeredEvent: 1.1.0
EiffelAnnouncementPublishedEvent: 1.1.0
EiffelArtifactCreatedEvent: 1.1.0
EiffelArtifactPublishedEvent: 1.1.0
EiffelArtifactReusedEvent: 1.1.0
EiffelCompositionDefinedEvent: 1.1.0
EiffelConfidenceLevelModifiedEvent: 1.1.0
EiffelEnvironmentDefinedEvent: 1.1.0
EiffelFlowContextDefinedEvent: 1.1.0
EiffelIssueVerifiedEvent: 1.1.0
EiffelSourceChangeCreatedEvent: 1.1.0
EiffelSourceChangeSubmittedEvent: 1.1.0
EiffelTestCaseCanceledEvent: 1.1.0
EiffelTestCaseFinishedEvent: 1.1.0
EiffelTestCaseStartedEvent: 1.1.0
EiffelTestCaseTriggeredEvent: 1.1.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 2.1.0
EiffelTestSuiteFinishedEvent: 1.1.0
EiffelTestSuiteStartedEvent: 1.1.0
- name: Agen
tag: edition-agen
release_date: '2018-09-19'
events:
EiffelActivityCanceledEvent: 3.0.0
EiffelActivityFinishedEvent: 3.0.0
EiffelActivityStartedEvent: 3.0.0
EiffelActivityTriggeredEvent: 3.0.0
EiffelAnnouncementPublishedEvent: 3.0.0
EiffelArtifactCreatedEvent: 3.0.0
EiffelArtifactPublishedEvent: 3.0.0
EiffelArtifactReusedEvent: 3.0.0
EiffelCompositionDefinedEvent: 3.0.0
EiffelConfidenceLevelModifiedEvent: 3.0.0
EiffelEnvironmentDefinedEvent: 3.0.0
EiffelFlowContextDefinedEvent: 3.0.0
EiffelIssueDefinedEvent: 3.0.0
EiffelIssueVerifiedEvent: 4.0.0
EiffelSourceChangeCreatedEvent: 4.0.0
EiffelSourceChangeSubmittedEvent: 3.0.0
EiffelTestCaseCanceledEvent: 3.0.0
EiffelTestCaseFinishedEvent: 3.0.0
EiffelTestCaseStartedEvent: 3.0.0
EiffelTestCaseTriggeredEvent: 3.0.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 4.0.0
EiffelTestSuiteFinishedEvent: 3.0.0
EiffelTestSuiteStartedEvent: 3.0.0
- name: Agen-1
tag: edition-agen-1
release_date: '2019-04-29'
events:
EiffelActivityCanceledEvent: 3.0.0
EiffelActivityFinishedEvent: 3.0.0
EiffelActivityStartedEvent: 4.0.0
EiffelActivityTriggeredEvent: 4.0.0
EiffelAnnouncementPublishedEvent: 3.0.0
EiffelArtifactCreatedEvent: 3.0.0
EiffelArtifactPublishedEvent: 3.0.0
EiffelArtifactReusedEvent: 3.0.0
EiffelCompositionDefinedEvent: 3.0.0
EiffelConfidenceLevelModifiedEvent: 3.0.0
EiffelEnvironmentDefinedEvent: 3.0.0
EiffelFlowContextDefinedEvent: 3.0.0
EiffelIssueDefinedEvent: 3.0.0
EiffelIssueVerifiedEvent: 4.0.0
EiffelSourceChangeCreatedEvent: 4.0.0
EiffelSourceChangeSubmittedEvent: 3.0.0
EiffelTestCaseCanceledEvent: 3.0.0
EiffelTestCaseFinishedEvent: 3.0.0
EiffelTestCaseStartedEvent: 3.0.0
EiffelTestCaseTriggeredEvent: 3.0.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 4.0.0
EiffelTestSuiteFinishedEvent: 3.0.0
EiffelTestSuiteStartedEvent: 3.0.0
- name: Paris
tag: edition-paris
release_date: '2021-02-16'
events:
EiffelActivityCanceledEvent: 3.0.0
EiffelActivityFinishedEvent: 3.0.0
EiffelActivityStartedEvent: 4.0.0
EiffelActivityTriggeredEvent: 4.0.0
EiffelAnnouncementPublishedEvent: 3.0.0
EiffelArtifactCreatedEvent: 3.0.0
EiffelArtifactPublishedEvent: 3.1.0
EiffelArtifactReusedEvent: 3.0.0
EiffelCompositionDefinedEvent: 3.1.0
EiffelConfidenceLevelModifiedEvent: 3.0.0
EiffelEnvironmentDefinedEvent: 3.0.0
EiffelFlowContextDefinedEvent: 3.0.0
EiffelIssueDefinedEvent: 3.0.0
EiffelIssueVerifiedEvent: 4.0.0
EiffelSourceChangeCreatedEvent: 4.0.0
EiffelSourceChangeSubmittedEvent: 3.0.0
EiffelTestCaseCanceledEvent: 3.0.0
EiffelTestCaseFinishedEvent: 3.0.0
EiffelTestCaseStartedEvent: 3.0.0
EiffelTestCaseTriggeredEvent: 3.0.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 4.0.0
EiffelTestSuiteFinishedEvent: 3.0.0
EiffelTestSuiteStartedEvent: 3.0.0
- name: Lyon
tag: edition-lyon
release_date: '2021-10-12'
events:
EiffelActivityCanceledEvent: 3.1.0
EiffelActivityFinishedEvent: 3.2.0
EiffelActivityStartedEvent: 4.2.0
EiffelActivityTriggeredEvent: 4.1.0
EiffelAnnouncementPublishedEvent: 3.1.0
EiffelArtifactCreatedEvent: 3.1.0
EiffelArtifactPublishedEvent: 3.2.0
EiffelArtifactReusedEvent: 3.1.0
EiffelCompositionDefinedEvent: 3.2.0
EiffelConfidenceLevelModifiedEvent: 3.1.0
EiffelEnvironmentDefinedEvent: 3.2.0
EiffelFlowContextDefinedEvent: 3.1.0
EiffelIssueDefinedEvent: 3.1.0
EiffelIssueVerifiedEvent: 4.1.0
EiffelSourceChangeCreatedEvent: 4.1.0
EiffelSourceChangeSubmittedEvent: 3.1.0
EiffelTestCaseCanceledEvent: 3.1.0
EiffelTestCaseFinishedEvent: 3.2.0
EiffelTestCaseStartedEvent: 3.2.0
EiffelTestCaseTriggeredEvent: 3.1.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 4.1.1
EiffelTestSuiteFinishedEvent: 3.2.0
EiffelTestSuiteStartedEvent: 3.2.0
- name: Arica
tag: edition-arica
release_date: '2022-11-18'
events:
EiffelActivityCanceledEvent: 3.2.0
EiffelActivityFinishedEvent: 3.3.0
EiffelActivityStartedEvent: 4.3.0
EiffelActivityTriggeredEvent: 4.2.0
EiffelAnnouncementPublishedEvent: 3.2.0
EiffelArtifactCreatedEvent: 3.3.0
EiffelArtifactPublishedEvent: 3.3.0
EiffelArtifactReusedEvent: 3.2.0
EiffelCompositionDefinedEvent: 3.3.0
EiffelConfidenceLevelModifiedEvent: 3.2.0
EiffelEnvironmentDefinedEvent: 3.3.0
EiffelFlowContextDefinedEvent: 3.2.0
EiffelIssueDefinedEvent: 3.2.0
EiffelIssueVerifiedEvent: 4.2.0
EiffelSourceChangeCreatedEvent: 4.2.0
EiffelSourceChangeSubmittedEvent: 3.2.0
EiffelTestCaseCanceledEvent: 3.2.0
EiffelTestCaseFinishedEvent: 3.3.0
EiffelTestCaseStartedEvent: 3.3.0
EiffelTestCaseTriggeredEvent: 3.2.0
EiffelTestExecutionRecipeCollectionCreatedEvent: 4.3.0
EiffelTestSuiteFinishedEvent: 3.3.0
EiffelTestSuiteStartedEvent: 3.3.0
78 changes: 78 additions & 0 deletions generate_manifest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/usr/bin/env python3

# Copyright 2023 Axis Communications AB.
# For a full list of individual contributors, please see the commit history.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import re
import subprocess
import sys
from typing import Dict

import semver
from ruamel import yaml

# List of tuples with the edition display names, their Git tags, and
# their release dates.
_EDITIONS = [
("Agen", "edition-agen", "2018-09-19"),
("Agen-1", "edition-agen-1", "2019-04-29"),
("Arica", "edition-arica", "2022-11-18"),
("Bordeaux", "edition-bordeaux", "2017-04-12"),
("Lyon", "edition-lyon", "2021-10-12"),
("Paris", "edition-paris", "2021-02-16"),
("Toulouse", "edition-toulouse", "2018-02-20"),
]


def _get_latest_schemas(tag: str) -> Dict[str, str]:
"""Given a tag, returns a mapping of the event types available in that
tag and the latest version of each such type.
"""
schema_file_regexp = re.compile(r"^schemas/([^/]+)/([^/]+).json$")
latest = {}
for schema_file in subprocess.check_output(
["git", "ls-tree", "-r", "--name-only", tag, "--", "schemas"]
).splitlines():
match = schema_file_regexp.search(schema_file.decode("utf-8"))
if not match:
continue
event_type = match.group(1)
event_version = semver.VersionInfo.parse(match.group(2))
if event_type not in latest or latest[event_type].compare(event_version) < 0:
latest[event_type] = event_version
return {
event_type: str(event_version) for event_type, event_version in latest.items()
}


def _main():
manifest = [
{
"name": name,
"tag": tag,
"release_date": date,
"events": _get_latest_schemas(tag),
}
for name, tag, date in sorted(_EDITIONS, key=lambda edition: edition[2])
]

sys.stdout.write("---\n")
yaml_writer = yaml.YAML()
yaml_writer.indent(mapping=2, sequence=4, offset=2)
yaml_writer.dump(manifest, sys.stdout)


if __name__ == "__main__":
_main()
3 changes: 2 additions & 1 deletion releases-and-milestones/release-process.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!---
Copyright 2022 Axis Communications AB.
Copyright 2022-2023 Axis Communications AB.
For a full list of individual contributors, please see the commit history.

Licensed under the Apache License, Version 2.0 (the "License");
Expand Down Expand Up @@ -33,6 +33,7 @@ When all issues in the scope of the edition have been closed and it's time to ma
1. Create a pull request with the following changes (see [PR 277](https://github.com/eiffel-community/eiffel/pull/277) for reference):
1. Change all "No edition set" entries in the release tables of the latest YAML file for each event type to a link to the not yet existing edition tag.
1. Claim the edition in [versioning.md](../eiffel-syntax-and-usage/versioning.md), including a short summary of the changes in the edition.
1. Add an entry for the new edition to [generate_manifest.py](../generate_manifest.py). Unfortunately, this means that CI for the resulting commit won't succeed until the tag has been created (see next step).
1. When the pull request has been merged, create and push an "edition-\<name>" annotated tag (use `git tag -a`). The tag comment could include a short version of the included changes to the protocol. Any new major versions of event types should be called out.
1. Create a GitHub release based on the newly pushed tag. The tag comment can probably be reused as the release description.
1. Create issue(s) for updating other repositories to reference the new edition:
Expand Down