Commit 08706104 authored by Philip Makedonski's avatar Philip Makedonski
Browse files

Merge branch 'ttf-022-maven' into ttf-022

# Conflicts (resolved):
#	plugins/org.etsi.mts.tdl.common/src/org/etsi/mts/tdl/scoping/TDLScopeProvider.java
#	plugins/org.etsi.mts.tdl.helper/META-INF/MANIFEST.MF
#	plugins/org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF
parents f892b9c3 6e4b51ac
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2,3 +2,4 @@ bin/
*._trace
*.xtendbin
.DS_Store
target/
 No newline at end of file

.gitlab-ci.yml

0 → 100644
+283 −0
Original line number Diff line number Diff line
# This file is a template, and might need editing before it works on your project.
# This is a sample GitLab CI/CD configuration file that should run without any modifications.
# It demonstrates a basic 3 stage CI/CD pipeline. Instead of real tests or scripts,
# it uses echo commands to simulate the pipeline execution.
#
# A pipeline is composed of independent jobs that run scripts, grouped into stages.
# Stages run in sequential order, but jobs within stages run in parallel.
#
# For more information, see: https://docs.gitlab.com/ee/ci/yaml/index.html#stages
#
# You can copy and paste this template into a new `.gitlab-ci.yml` file.
# You should not add this template to an existing `.gitlab-ci.yml` file by using the `include:` keyword.
#
# To contribute improvements to CI/CD templates, please follow the Development guide at:
# https://docs.gitlab.com/ee/development/cicd/templates.html
# This specific template is located at:
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Getting-Started.gitlab-ci.yml

# Build JAVA applications using Apache Maven (http://maven.apache.org)
# For docker image tags see https://hub.docker.com/_/maven/
#
# For general lifecycle information see https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

# This template will build and test your projects
# * Caches downloaded dependencies and plugins between invocation.
# * Verify but don't deploy merge requests.
# * Deploy built artifacts from master branch only.

variables:
  # CI_TARGET_BRANCH: $CI_DEFAULT_BRANCH
  CI_TARGET_BRANCH: "ttf-022-maven"
  DEV_CI_TARGET_BRANCH: "dev"
  MAIN_CI_TARGET_BRANCH: "master"
  SITE_LOCATION: "updatesite/org.etsi.mts.tdl.updatesite/target"
  ARCHIVE_NAME: "org.etsi.mts.tdl.updatesite-1.0.0-SNAPSHOT.zip"
  SITE_ARCHIVE: "${SITE_LOCATION}/${ARCHIVE_NAME}"
  SITE_PATH: "${SITE_LOCATION}/repository/"
  REPO_PREFIX: "https://labs.etsi.org/rep/top/ide/-/jobs"
  REPO_PATH: "artifacts/raw/updatesite/org.etsi.mts.tdl.updatesite/target/repository/"
  PACKAGE_NAME: "TOP IDE Interim Build"
  BETA_PATH: "public/updatesite/beta"
  BETA_PAGE: "https://top.etsi.org/ide/updatesite/beta"
  STANDALONE_LOCATION: "plugins/org.etsi.mts.tdl.standalone/target"
  STANDALONE_NAME: "org.etsi.mts.tdl.standalone-1.0.0-SNAPSHOT-shadow.jar"
  STANDALONE_PATH: "${STANDALONE_LOCATION}/${STANDALONE_NAME}"

  # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
  MAVEN_OPTS: >-
    -Xmx2048m
    -Dhttps.protocols=TLSv1.2
    -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository
    -Dorg.slf4j.simpleLogger.showDateTime=true
    -Djava.awt.headless=true

  # As of Maven 3.3.0 instead of this you MAY define these options in `.mvn/maven.config` so the same config is used
  # when running from the command line.
  # As of Maven 3.6.1, the use of `--no-tranfer-progress` (or `-ntp`) suppresses download and upload messages. The use
  # of the `Slf4jMavenTransferListener` is no longer necessary.
  # `installAtEnd` and `deployAtEnd` are only effective with recent version of the corresponding plugins.
  MAVEN_CLI_OPTS: >-
    --batch-mode
    --errors
    --fail-at-end
    --show-version
    --no-transfer-progress
    -DinstallAtEnd=true
    -DdeployAtEnd=true

.default_rules:
  rules:
    - if: $CI_PIPELINE_SOURCE == "schedule"
      when: never
    - if: $CI_COMMIT_BRANCH == $CI_TARGET_BRANCH
    - if: '$CI_PIPELINE_SOURCE == "web"'
      when: always
    - if: $CI_COMMIT_TAG
      when: never
    # - when: never



# This template uses the latest Maven 3 release, e.g., 3.8.6, and OpenJDK 8 (LTS)
# for verifying and deploying images
# Maven 3.8.x REQUIRES HTTPS repositories.
# See https://maven.apache.org/docs/3.8.1/release-notes.html#how-to-fix-when-i-get-a-http-repository-blocked for more.
image: maven:3-openjdk-11

# Cache downloaded dependencies and plugins between builds.
# To keep cache across branches add 'key: "$CI_JOB_NAME"'
# Be aware that `mvn deploy` will install the built jar into this repository. If you notice your cache size
# increasing, consider adding `-Dmaven.install.skip=true` to `MAVEN_OPTS` or in `.mvn/maven.config`
cache:
  paths:
    - .m2/repository

# For merge requests do not `deploy` but only run `verify`.
# See https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
# .verify:
  # stage: test
  # script:
    # - cd org.etsi.mts.tdl.parent
    # - 'mvn $MAVEN_CLI_OPTS verify'
  # except:
    # variables:
      # - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

# Verify merge requests using JDK8
# verify:jdk11:
  # extends:
    # - .verify

# To deploy packages from CI, create a `ci_settings.xml` file
# For deploying packages to GitLab's Maven Repository: See https://docs.gitlab.com/ee/user/packages/maven_repository/index.html#create-maven-packages-with-gitlab-cicd for more details.
# Please note: The GitLab Maven Repository is currently only available in GitLab Premium / Ultimate.
# For `master` or `main` branch run `mvn deploy` automatically.
#deploy:jdk11:
#  stage: deploy
#  script:
#    - if [ ! -f ci_settings.xml ]; then
#        echo "CI settings missing\! If deploying to GitLab Maven Repository, please see https://docs.gitlab.com/ee/user/packages/maven_repository/index.html#create-maven-packages-with-gitlab-cicd for instructions.";
#      fi
#    - 'mvn $MAVEN_CLI_OPTS deploy --settings ci_settings.xml'
#  only:
#    variables:
#      - $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH


stages:          # List of stages for jobs, and their order of execution
  - build
  - test
  - deploy
  - prepare
  - upload
  - release

build-job:       # This job runs in the build stage, which runs first.
  stage: build
  rules:
    - !reference [.default_rules, rules]
  script:
    - echo "Compiling the code..."
    - echo "BUILD_JOB_ID=$CI_JOB_ID" >> build.env
    - cat build.env
    - cd org.etsi.mts.tdl.parent
    - mvn clean install
    - echo "Compile complete."
  artifacts:
    expire_in: 7 days
    reports:
      dotenv: build.env
    paths:
      - $SITE_ARCHIVE
      - $SITE_PATH
      # - $STANDALONE_PATH 

# unit-test-job:   # This job runs in the test stage.
  # stage: test    # It only starts when the job in the build stage completes successfully.
  # script:
    # - echo "Running unit tests... This will take about 6 seconds."
    # - sleep 6
    # - echo "Code coverage is 0%"

# lint-test-job:   # This job also runs in the test stage.
  # stage: test    # It can run at the same time as unit-test-job (in parallel).
  # script:
    # - echo "Linting code... This will take about 1 seconds."
    # - sleep 1
    # - echo "No lint issues found."

# deploy-job:      # This job runs in the deploy stage.
  # stage: deploy  # It only runs when *both* jobs in the test stage complete successfully.
  # environment: production
  # script:
    # - echo "Deploying application..."
    # - echo "Application successfully deployed."


# Adapted from OpenAPI2TDL converter
prepare:
  stage: prepare
  rules:
    - !reference [.default_rules, rules]
  script:
    - VERSION=`date +%Y%m%d.%H.%M`
    - echo "EXTRA_DESCRIPTION=automatic-release" >> variables.env
    - echo "VERSION=$VERSION" >> variables.env
    - echo "PACKAGE_REGISTRY_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ide/${VERSION}" >> variables.env
    - echo "PACKAGE_LATEST_URL=${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/ide/latest" >> variables.env
    - cat variables.env
  artifacts:
    reports:
      dotenv: variables.env   # Use artifacts:reports:dotenv to expose the variables to other jobs

# https://gitlab.com/gitlab-org/release-cli/-/tree/master/docs/examples/release-assets-as-generic-package/
upload:
  stage: upload
  image: curlimages/curl:latest
  needs:
    - job: prepare
      artifacts: true
    - job: build-job
      artifacts: true
  rules:
    - !reference [.default_rules, rules]
  script:
    - echo $BUILD_JOB_ID    
    - echo "${PACKAGE_REGISTRY_URL}/${ARCHIVE_NAME}"
    - |
      curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${SITE_ARCHIVE} ${PACKAGE_REGISTRY_URL}/${ARCHIVE_NAME}
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${STANDALONE_LOCATION} ${PACKAGE_REGISTRY_URL}/${STANDALONE_NAME}
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file ${SITE_ARCHIVE} ${PACKAGE_LATEST_URL}/${ARCHIVE_NAME}
    # - |
      # cd ${SITE_LOCATION} && find repository/ -type f -exec echo curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file {} ${PACKAGE_LATEST_URL}/{} \; && cd ~
    # - |
      # cd ${SITE_LOCATION} && find repository/ -type f -exec curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file {} ${PACKAGE_LATEST_URL}/{} \; 
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${MACOS_GUI_JAR} ${PACKAGE_REGISTRY_URL}/${MACOS_GUI_JAR}
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${WINDOWS_GUI_JAR} ${PACKAGE_REGISTRY_URL}/${WINDOWS_GUI_JAR}
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${CLI_JAR} ${PACKAGE_REGISTRY_URL}/${CLI_JAR}
    # - |
      # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${LIB_JAR} ${PACKAGE_REGISTRY_URL}/${LIB_JAR}

pages:
  stage: upload
  # image: curlimages/curl:latest
  needs:
    - job: prepare
      artifacts: true
    - job: build-job
      artifacts: true
  script:
    # Get the previous GitLab Pages content
    # - set +e
    # - curl --fail "$CI_PAGES_URL/content.zip" -o "content.zip"
    # - if [ -e "content.zip" ]; then unzip "content.zip"; rm "content.zip"; fi
    # - set -e
    # Add/update content
    - echo $CI_PAGES_URL
    - mkdir -p $BETA_PATH
    - cp -r -f $SITE_PATH/* $BETA_PATH
    # Zip the content and publish the zip again
    # - zip -r "content.zip" "public"
    # - mv "content.zip" "public/"
    # - mv $SITE_ARCHIVE $BETA_PATH/content.zip
  artifacts:
    paths:
      - public
  rules:
    - !reference [.default_rules, rules]
  # only:
    # - tags  

release:
  stage: release
  image: registry.gitlab.com/gitlab-org/release-cli:latest
  needs:
    - job: prepare
      artifacts: true
    - job: build-job
      artifacts: true
  rules:
    - !reference [.default_rules, rules]
  script:
    # unpack latest?
    # --description "Published automatically, permalink for installation (valid for 7 days) at https://labs.etsi.org/rep/top/ide/-/releases/permalink/latest/downloads/repository." 
    - echo $BUILD_JOB_ID    
    - |
      release-cli create --name "Release $VERSION" \
        --tag-name $VERSION \
        --ref $CI_COMMIT_SHA \
        --assets-link "{\"name\":\"${PACKAGE_NAME}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${ARCHIVE_NAME}\",\"filepath\":\"/repository-archive\"}" \
        --assets-link "{\"name\":\"${PACKAGE_NAME} (latest repository (exipres in 7 days))\",\"url\":\"${REPO_PREFIX}/${BUILD_JOB_ID}/${REPO_PATH}\",\"filepath\":\"/repository\"}" \
        --assets-link "{\"name\":\"${PACKAGE_NAME} (latest beta (permalink))\",\"url\":\"${BETA_PAGE}\"}" \
        # --assets-link "{\"name\":\"${PACKAGE_NAME} (latest standalone (exipres in 7 days))\",\"url\":\"${PACKAGE_REGISTRY_URL}/${STANDALONE_NAME}\"}" \
        # --assets-link "{\"name\":\"${PACKAGE_NAME} (latest)\",\"url\":\"${PACKAGE_LATEST_URL}/${ARCHIVE_NAME}\"}" \
        # --assets-link "{\"name\":\"${MACOS_GUI_JAR}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${MACOS_GUI_JAR}\"}" \
        # --assets-link "{\"name\":\"${WINDOWS_GUI_JAR}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${WINDOWS_GUI_JAR}\"}" \
        # --assets-link "{\"name\":\"${CLI_JAR}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${CLI_JAR}\"}" \
        # --assets-link "{\"name\":\"${LIB_JAR}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${LIB_JAR}\"}"
+30 −0
Original line number Diff line number Diff line
@@ -14,8 +14,18 @@ Alternatively, you can install the plug-ins manually from an update site. In thi

    https://tdl.etsi.org/eclipse/latest/

With the CI/CD integration, a beta-channel is available at the [development update site](https://top.etsi.org/ide/updatesite/beta) for the latest development versions of the TDL tools:

    https://top.etsi.org/ide/updatesite/beta

Eventually, the stable branch will be switched to CI/CD as well, to be made avalable at:

    https://top.etsi.org/ide/updatesite/stable

After the update site is added, the list of plug-ins and features shall be shown in the installation dialog (menu item Help->Install New Software..). Select the desired features and proceed with the installation, which will require Eclipse to be restarted once the installation is finished.

Interim snapshot builds are also available from the [Packages](https://labs.etsi.org/rep/top/ide/-/packages) / [Releases](https://labs.etsi.org/rep/top/ide/-/releases) areas on GitLab. These can be downloaded and installed in Eclipse by adding a new update site from a local archive. Please note that these interim builds may not be stable as they reflect the development at a certain point in time between stable releases and while certain issues may be addressed, new ones may not yet have been identifed.

In Eclipse 2021-06 some components may need to be updated first to ensure compatibility with the graphical editor. During the installation, this may be proposed as a solution. 

Find more detailed information at [Installation wiki](https://labs.etsi.org/rep/top/ide/-/wikis/Installation).
@@ -48,6 +58,18 @@ The same steps can be applied to create a new TDL model by means of the brace-ba

More information on using the plugins is available at [Usage wiki](https://labs.etsi.org/rep/top/ide/-/wikis/Usage).

## Using the standalone commandline tools

There also standalone commandline tools which can be used for scripting selected functionalities from the TDL tools as part of a pipeline. Currently the following functionalities are available:

* Listing elements
* Validating specifications
* Translating between different representation formats
* Importing data specifications from OpenAPI and ASN.1
* **TODO**: Complete list

The commandline tools are part of the `org.etsi.mts.tdl.standalone` plugin. A self-contained version is available as part of the CI/CD releases.

## Textual Syntax Specifications

The complete specification for the standardised textual syntax ([ES 203 119-8 v1.1.1 (to be published in March 2022)](https://tdl.etsi.org/index.php/downloads))  as well as the corresponding extensions for Structured Testo Objective Specifications ([ES 203 119-4 v1.5.1, clause 8 (to be published in March 2022)](https://tdl.etsi.org/index.php/downloads)) Extended Test Configurations ([ES 203 119-7 v1.3.1, clause 8 (to be published in March 2022)](https://tdl.etsi.org/index.php/downloads)) is available in [TDLtx.xtext](plugins/org.etsi.mts.tdl.tx/src/org/etsi/mts/tdl/TDLtx.xtext). It uses the [Xtext Grammar Language](https://www.eclipse.org/Xtext/documentation/301_grammarlanguage.html) which also allows the specification of the bindings between the textual syntax elements and the meta-model elements. By default, brace-based delimiters are used (i.e. the "brace-based variant"). Instead, the [TDLtxi.xtext](plugins/org.etsi.mts.tdl.txi/src/org/etsi/mts/tdl/TDLtxi.xtext) specifies the necessary overrides for the indentation-based delimiters (i.e. the "indentation-based variant"). 
@@ -56,15 +78,21 @@ From end-user's perspective this translates to two file extensions - `.tdltx` fo

## Setting up a local environment for development and testing

The following steps are needed to setup a local development environment.

 * Download and install Eclipse Modeling Tools package
 * Install following additional components from Eclipse Marketplace
     * Sirius (v7)
     * Eclipse Xtext (v2.29 or newer)
     * Epsilon (v2.x)
     * Eclipse OCL (v6.x)
     * Eclise Maven Integration m2e (v2.1.x)
 * Check out the repository
 * Import the plug-ins in the Eclipse workspace
     * Import -> Existing Projects into Workspace

As we are adding integration with Maven, the following steps shall be fully automated. Still in some scenarios, they may need to be executed manually. While the Maven integration does make it possible to implement small changes also in other editors and IDEs, it is still recommended to use the Eclipse Modelling Tools as many issues may otherwise be overlooked and hard to diagnose.

 * Generate the meta-model code
     * Open the `tdl.genmodel` 
     * Make sure that the "Realisation of OCL embedded within Ecore models" is set to "Delegate for interpretation at run-time" in the Eclipse preferences (setting it on project level does not seem sufficient currently)
@@ -92,6 +120,7 @@ The implementation currently supports:
 * Data mappings to the target (Java) data implementaions derived from the OpenAPI definitions for executability.

### Implementation of the ASN.1 import into TDL

The generation of data types based on ASN.1 specifications is based on the [BeanIt ASN1Bean](https://github.com/beanit/asn1bean) (formerly known as jASN).

The implementation currently supports: 
@@ -101,6 +130,7 @@ The implementation currently supports:
Note that the upstream components provided by the ASN1Bean may not be able to process all ASN.1 specifications as they do not provide 100% coverage of the ASN.1 syntax. In this case, the outcome may be incomplete.

### Implementation of the transformation of Structured Test Objectives to TDL Test Descriptions

The transformation of Structured Test Objectives into TDL Test Descriptions currently supports:
 * Transforming of inline data descriptions within `EventOccurrences` into corresponding data types.
 * Generation of `TestConfigurations` based on the `EventSequences` within the Structured Test Objective.
+17 −0
Original line number Diff line number Diff line
@@ -10,8 +10,25 @@
			<arguments>
			</arguments>
		</buildCommand>
		<buildCommand>
			<name>org.eclipse.m2e.core.maven2Builder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.m2e.core.maven2Nature</nature>
		<nature>org.eclipse.pde.FeatureNature</nature>
	</natures>
	<filteredResources>
		<filter>
			<id>1681464246838</id>
			<name></name>
			<type>30</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
			</matcher>
		</filter>
	</filteredResources>
</projectDescription>
+18 −0
Original line number Diff line number Diff line
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	
  <modelVersion>4.0.0</modelVersion>

	<parent>
		<groupId>org.etsi.mts.tdl</groupId>
	  	<artifactId>org.etsi.mts.tdl.parent</artifactId>
		<version>1.0.0-SNAPSHOT</version>
		<relativePath>../../org.etsi.mts.tdl.parent</relativePath>

	</parent>

	<artifactId>org.etsi.mts.tdl.constraints.feature</artifactId>
  	<packaging>eclipse-feature</packaging>

	<name>TDL Constraints Feature</name>
</project>
 No newline at end of file
Loading