From 15f374c760a6a407a906cfb86a588337778eb2ff Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 11:30:50 +0200 Subject: [PATCH 01/17] fix dependencies versions update node version --- Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0d142736..d369f070 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,15 +3,15 @@ ############################################################### # build highlight jolie highlight.js -FROM node:alpine AS highlight-jolie +FROM node:20-alpine AS highlight-jolie WORKDIR /highlight-jolie COPY highlight-jolie . RUN npm install -RUN npm run build +RUN npm run build --verbose # install mdbook -FROM rust:1.65 AS builder -ENV MDBOOK_VERSION="0.4.21" +FROM rust:1.80 AS builder +ENV MDBOOK_VERSION="0.4.40" ENV ARC="x86_64-unknown-linux-musl" RUN apt-get update && \ apt-get install --no-install-recommends -y \ @@ -19,7 +19,7 @@ RUN apt-get update && \ RUN rustup target add "${ARC}" RUN cargo --version # RUN cargo install mdbook -RUN cargo install mdbook --version "${MDBOOK_VERSION}" --target "${ARC}" +RUN cargo install mdbook --version "${MDBOOK_VERSION}" --target "${ARC}" --locked # RUN cargo install mdbook-mermaid RUN cargo install mdbook-mermaid --target "${ARC}" From e9f4e32d0b8c0a2d52218f96db8e3f935ae0ebb4 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 11:31:17 +0200 Subject: [PATCH 02/17] add edit url template --- book.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/book.toml b/book.toml index e91ed3ae..e1dca1e9 100644 --- a/book.toml +++ b/book.toml @@ -19,6 +19,7 @@ command = "mdbook-mermaid" [output.html] additional-js = ["src/assets/js/mermaid.min.js", "src/assets/js/mermaid-init.js"] +edit-url-template = "https://github.com/jolie/docs/edit/v1.13.x-git/{path}" [output.html.font] enable = true From a39bde69d2cca8ddcfd29fb4cf2c7cd62d9b395e Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 12:10:05 +0200 Subject: [PATCH 03/17] update pre-commit deps versions --- .markdownlint.json | 6 +++--- .pre-commit-config.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.markdownlint.json b/.markdownlint.json index a0acc242..fce6205b 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -6,7 +6,7 @@ "MD033": false, "MD045": false, "MD024": { - "siblings_only": true, - "allow_different_nesting": true - } + "siblings_only": true + }, + "MD046": false } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5954634c..48cf28fc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ fail_fast: true default_stages: [commit, push] repos: - repo: https://github.com/oxsecurity/megalinter - rev: v7.13.0 # Git tag specifying the hook, not mega-linter-runner, version + rev: v8.0.0 # Git tag specifying the hook, not mega-linter-runner, version hooks: - id: megalinter-incremental # Faster, less thorough stages: From e6546fc47656f48fe5e211cbe1d6ca2af89d8c9e Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 11:30:50 +0200 Subject: [PATCH 04/17] fix dependencies versions update node version --- Dockerfile | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 0d142736..d369f070 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,15 +3,15 @@ ############################################################### # build highlight jolie highlight.js -FROM node:alpine AS highlight-jolie +FROM node:20-alpine AS highlight-jolie WORKDIR /highlight-jolie COPY highlight-jolie . RUN npm install -RUN npm run build +RUN npm run build --verbose # install mdbook -FROM rust:1.65 AS builder -ENV MDBOOK_VERSION="0.4.21" +FROM rust:1.80 AS builder +ENV MDBOOK_VERSION="0.4.40" ENV ARC="x86_64-unknown-linux-musl" RUN apt-get update && \ apt-get install --no-install-recommends -y \ @@ -19,7 +19,7 @@ RUN apt-get update && \ RUN rustup target add "${ARC}" RUN cargo --version # RUN cargo install mdbook -RUN cargo install mdbook --version "${MDBOOK_VERSION}" --target "${ARC}" +RUN cargo install mdbook --version "${MDBOOK_VERSION}" --target "${ARC}" --locked # RUN cargo install mdbook-mermaid RUN cargo install mdbook-mermaid --target "${ARC}" From 4e2d9750bc6085c708517b46a2ebf76a2a8c956a Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 11:31:17 +0200 Subject: [PATCH 05/17] add edit url template --- book.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/book.toml b/book.toml index e91ed3ae..e1dca1e9 100644 --- a/book.toml +++ b/book.toml @@ -19,6 +19,7 @@ command = "mdbook-mermaid" [output.html] additional-js = ["src/assets/js/mermaid.min.js", "src/assets/js/mermaid-init.js"] +edit-url-template = "https://github.com/jolie/docs/edit/v1.13.x-git/{path}" [output.html.font] enable = true From 65627b7bbab5fc67f5e7dc8dc951eb3478f4ec43 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 13:04:21 +0200 Subject: [PATCH 06/17] update pre-commit deps versions --- .markdownlint.json | 6 +++--- .pre-commit-config.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.markdownlint.json b/.markdownlint.json index a0acc242..fce6205b 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -6,7 +6,7 @@ "MD033": false, "MD045": false, "MD024": { - "siblings_only": true, - "allow_different_nesting": true - } + "siblings_only": true + }, + "MD046": false } diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2823f07a..48cf28fc 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,7 +3,7 @@ fail_fast: true default_stages: [commit, push] repos: - repo: https://github.com/oxsecurity/megalinter - rev: v7.12.0 # Git tag specifying the hook, not mega-linter-runner, version + rev: v8.0.0 # Git tag specifying the hook, not mega-linter-runner, version hooks: - id: megalinter-incremental # Faster, less thorough stages: From fd0559a5b0d4a9fffdd4c562859aad635619cdb4 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 13:17:46 +0200 Subject: [PATCH 07/17] update edit url --- book.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book.toml b/book.toml index e1dca1e9..7d59f199 100644 --- a/book.toml +++ b/book.toml @@ -19,7 +19,7 @@ command = "mdbook-mermaid" [output.html] additional-js = ["src/assets/js/mermaid.min.js", "src/assets/js/mermaid-init.js"] -edit-url-template = "https://github.com/jolie/docs/edit/v1.13.x-git/{path}" +edit-url-template = "https://github.com/jolie/docs/edit/v1.11.x/{path}" [output.html.font] enable = true From 431c1e011d675f38cc37f8220de67d3dbad76850 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Fri, 30 Aug 2024 13:18:54 +0200 Subject: [PATCH 08/17] update edit url --- book.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book.toml b/book.toml index e1dca1e9..d59e6dda 100644 --- a/book.toml +++ b/book.toml @@ -19,7 +19,7 @@ command = "mdbook-mermaid" [output.html] additional-js = ["src/assets/js/mermaid.min.js", "src/assets/js/mermaid-init.js"] -edit-url-template = "https://github.com/jolie/docs/edit/v1.13.x-git/{path}" +edit-url-template = "https://github.com/jolie/docs/edit/v1.12.x/{path}" [output.html.font] enable = true From 22ba2e571ea1e438e954e098158fa455b5b116a7 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 1 Oct 2024 11:01:17 +0200 Subject: [PATCH 09/17] fix import target --- .mega-linter.yml | 2 +- .pre-commit-config.yaml | 6 ------ .../architectural-composition/embedding/README.md | 4 ++-- src/tutorials/getting-started/README.md | 10 +++++----- src/tutorials/using-dependencies/README.md | 4 ++-- .../https/README.md | 4 ++-- .../soaps/README.md | 4 ++-- .../sodep/README.md | 4 ++-- .../sodeps/README.md | 4 ++-- src/tutorials/using-more-than-one-dependency/README.md | 4 ++-- 10 files changed, 20 insertions(+), 26 deletions(-) diff --git a/.mega-linter.yml b/.mega-linter.yml index 7d78261e..f1a30d6b 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -8,7 +8,7 @@ DISABLE: - CSS - DOCKERFILE - REPOSITORY - # - SPELL # Uncomment to disable checks of spelling mistakes + - SPELL # Uncomment to disable checks of spelling mistakes SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false # DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 48cf28fc..93d25782 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,10 +8,4 @@ repos: - id: megalinter-incremental # Faster, less thorough stages: - commit - args: - - mega-linter-runner - - --containername=megalinter-incremental - - --flavor=documentation - - --remove-container - - --fix # npx mega-linter-runner -e 'ENABLE=MARKDOWN,YAML' -e 'SHOW_ELAPSED_TIME=true' -e "'APPLY_FIXES=all'" -e "'CLEAR_REPORT_FOLDER=true'" -e "'LOG_LEVEL=warning'" --containername megalinter-incremental --remove-container --fix --filesonly diff --git a/src/language-tools-and-standard-library/architectural-composition/embedding/README.md b/src/language-tools-and-standard-library/architectural-composition/embedding/README.md index 7a0879d3..c31f3792 100644 --- a/src/language-tools-and-standard-library/architectural-composition/embedding/README.md +++ b/src/language-tools-and-standard-library/architectural-composition/embedding/README.md @@ -144,8 +144,8 @@ As an example let us consider the case of a calculator which offers the four ari ```jolie from runtime import Runtime -from OperationInterface import OperationInterface -from CalculatorInterface import CalculatorInterface +from .OperationInterface import OperationInterface +from .CalculatorInterface import CalculatorInterface service Calculator { diff --git a/src/tutorials/getting-started/README.md b/src/tutorials/getting-started/README.md index c8ea6913..587bf027 100644 --- a/src/tutorials/getting-started/README.md +++ b/src/tutorials/getting-started/README.md @@ -73,21 +73,21 @@ Some interesting things to note: Once we have defined the interface to implement, we are ready to define the service. Let's call the service `CalculatorService`. Edit a new module as follows: ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { } ``` -This code permits to import the definition of the `CalculatorInterface` from module `CalculatorInterfaceModule` stored into file `CalculatorInterfaceModule.ol` and defines a service called `CalculatorService`. +This code permits to import the definition of the `CalculatorInterface` from module `CalculatorInterfaceModule` stored into file `CalculatorInterfaceModule.ol` and defines a service called `CalculatorService`. The dot prefix tells Jolie that it should find the module in the same directory. ### Defining the inputPort Unfortunately, the code above will raise an error if executed, because the service definition does not contain any listening port nor any behaviour too. Let's start by defining a listening endpoint for this service: ```jolie -rom CalculatorInterfaceModule import CalculatorInterface +rom .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { @@ -110,7 +110,7 @@ Listening endpoints in Jolie are called `inputPort`. In this example we defined Now, the service is ready to receive messages on the operation specified in interface `CalculatorInterface` but we did not tell it what to do once a message is received. It is time to finalize the service by specifying the behaviour: ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { @@ -205,7 +205,7 @@ In order to enable the service to continuously serve requests we need to specify So, let's admire our first service in Jolie! ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { diff --git a/src/tutorials/using-dependencies/README.md b/src/tutorials/using-dependencies/README.md index 7a5e007f..3a64268f 100644 --- a/src/tutorials/using-dependencies/README.md +++ b/src/tutorials/using-dependencies/README.md @@ -50,8 +50,8 @@ The service offers three operations: `factorial`, `average` and `percentage` who In the following we report the actual definition of the `AdvancedCalculatorService`: ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service AdvancedCalculatorService { diff --git a/src/tutorials/using-more-input-ports-and-protocols/https/README.md b/src/tutorials/using-more-input-ports-and-protocols/https/README.md index 6cea80eb..681e4bf7 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/https/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/https/README.md @@ -34,8 +34,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md b/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md index 15dff37d..7365e4ce 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md @@ -41,8 +41,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md b/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md index 04dfc8f4..c8014076 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md @@ -29,8 +29,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md b/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md index 58dc90ff..de327c98 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md @@ -31,8 +31,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-than-one-dependency/README.md b/src/tutorials/using-more-than-one-dependency/README.md index 3b09a59e..90ffece1 100644 --- a/src/tutorials/using-more-than-one-dependency/README.md +++ b/src/tutorials/using-more-than-one-dependency/README.md @@ -53,8 +53,8 @@ It is worth noting that all the response messages, now contain a new field calle In the following we report the definition of the `AdvancedCalculatorService`. ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) From 17c6283766a4bb4ab08c2a539de220ae9f121b84 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 1 Oct 2024 11:01:17 +0200 Subject: [PATCH 10/17] fix import target --- .mega-linter.yml | 2 +- .pre-commit-config.yaml | 6 ------ .../architectural-composition/embedding/README.md | 4 ++-- src/tutorials/getting-started/README.md | 10 +++++----- src/tutorials/using-dependencies/README.md | 4 ++-- .../https/README.md | 4 ++-- .../soaps/README.md | 4 ++-- .../sodep/README.md | 4 ++-- .../sodeps/README.md | 4 ++-- src/tutorials/using-more-than-one-dependency/README.md | 4 ++-- 10 files changed, 20 insertions(+), 26 deletions(-) diff --git a/.mega-linter.yml b/.mega-linter.yml index 7d78261e..f1a30d6b 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -8,7 +8,7 @@ DISABLE: - CSS - DOCKERFILE - REPOSITORY - # - SPELL # Uncomment to disable checks of spelling mistakes + - SPELL # Uncomment to disable checks of spelling mistakes SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false # DISABLE_ERRORS: true # Uncomment if you want MegaLinter to detect errors but not block CI to pass diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 48cf28fc..93d25782 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,10 +8,4 @@ repos: - id: megalinter-incremental # Faster, less thorough stages: - commit - args: - - mega-linter-runner - - --containername=megalinter-incremental - - --flavor=documentation - - --remove-container - - --fix # npx mega-linter-runner -e 'ENABLE=MARKDOWN,YAML' -e 'SHOW_ELAPSED_TIME=true' -e "'APPLY_FIXES=all'" -e "'CLEAR_REPORT_FOLDER=true'" -e "'LOG_LEVEL=warning'" --containername megalinter-incremental --remove-container --fix --filesonly diff --git a/src/language-tools-and-standard-library/architectural-composition/embedding/README.md b/src/language-tools-and-standard-library/architectural-composition/embedding/README.md index 7a0879d3..c31f3792 100644 --- a/src/language-tools-and-standard-library/architectural-composition/embedding/README.md +++ b/src/language-tools-and-standard-library/architectural-composition/embedding/README.md @@ -144,8 +144,8 @@ As an example let us consider the case of a calculator which offers the four ari ```jolie from runtime import Runtime -from OperationInterface import OperationInterface -from CalculatorInterface import CalculatorInterface +from .OperationInterface import OperationInterface +from .CalculatorInterface import CalculatorInterface service Calculator { diff --git a/src/tutorials/getting-started/README.md b/src/tutorials/getting-started/README.md index c8ea6913..587bf027 100644 --- a/src/tutorials/getting-started/README.md +++ b/src/tutorials/getting-started/README.md @@ -73,21 +73,21 @@ Some interesting things to note: Once we have defined the interface to implement, we are ready to define the service. Let's call the service `CalculatorService`. Edit a new module as follows: ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { } ``` -This code permits to import the definition of the `CalculatorInterface` from module `CalculatorInterfaceModule` stored into file `CalculatorInterfaceModule.ol` and defines a service called `CalculatorService`. +This code permits to import the definition of the `CalculatorInterface` from module `CalculatorInterfaceModule` stored into file `CalculatorInterfaceModule.ol` and defines a service called `CalculatorService`. The dot prefix tells Jolie that it should find the module in the same directory. ### Defining the inputPort Unfortunately, the code above will raise an error if executed, because the service definition does not contain any listening port nor any behaviour too. Let's start by defining a listening endpoint for this service: ```jolie -rom CalculatorInterfaceModule import CalculatorInterface +rom .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { @@ -110,7 +110,7 @@ Listening endpoints in Jolie are called `inputPort`. In this example we defined Now, the service is ready to receive messages on the operation specified in interface `CalculatorInterface` but we did not tell it what to do once a message is received. It is time to finalize the service by specifying the behaviour: ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { @@ -205,7 +205,7 @@ In order to enable the service to continuously serve requests we need to specify So, let's admire our first service in Jolie! ```jolie -from CalculatorInterfaceModule import CalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service CalculatorService { diff --git a/src/tutorials/using-dependencies/README.md b/src/tutorials/using-dependencies/README.md index 7a5e007f..3a64268f 100644 --- a/src/tutorials/using-dependencies/README.md +++ b/src/tutorials/using-dependencies/README.md @@ -50,8 +50,8 @@ The service offers three operations: `factorial`, `average` and `percentage` who In the following we report the actual definition of the `AdvancedCalculatorService`: ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface service AdvancedCalculatorService { diff --git a/src/tutorials/using-more-input-ports-and-protocols/https/README.md b/src/tutorials/using-more-input-ports-and-protocols/https/README.md index 6cea80eb..681e4bf7 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/https/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/https/README.md @@ -34,8 +34,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md b/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md index 15dff37d..7365e4ce 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/soaps/README.md @@ -41,8 +41,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md b/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md index 04dfc8f4..c8014076 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/sodep/README.md @@ -29,8 +29,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md b/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md index 58dc90ff..de327c98 100644 --- a/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md +++ b/src/tutorials/using-more-input-ports-and-protocols/sodeps/README.md @@ -31,8 +31,8 @@ The complete example follows and it may be consulted at this [link] () ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) diff --git a/src/tutorials/using-more-than-one-dependency/README.md b/src/tutorials/using-more-than-one-dependency/README.md index 3b09a59e..90ffece1 100644 --- a/src/tutorials/using-more-than-one-dependency/README.md +++ b/src/tutorials/using-more-than-one-dependency/README.md @@ -53,8 +53,8 @@ It is worth noting that all the response messages, now contain a new field calle In the following we report the definition of the `AdvancedCalculatorService`. ```jolie -from AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface -from CalculatorInterfaceModule import CalculatorInterface +from .AdvancedCalculatorServiceInterfaceModule import AdvancedCalculatorInterface +from .CalculatorInterfaceModule import CalculatorInterface interface ChuckNorrisIface { RequestResponse: random( undefined )( undefined ) From 3f01f202beb5849eab5009bb51a495a339771981 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 1 Oct 2024 11:11:12 +0200 Subject: [PATCH 11/17] fix explanation --- src/tutorials/getting-started/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tutorials/getting-started/README.md b/src/tutorials/getting-started/README.md index 587bf027..7b7c9c15 100644 --- a/src/tutorials/getting-started/README.md +++ b/src/tutorials/getting-started/README.md @@ -64,9 +64,9 @@ Some interesting things to note: * in Jolie there are basic data types as integers, string, double, etc. In the example we exploit `int` (integers) for all the operations with the exception of operations multiplication and division where we use type `double`. You can check the other basic types [here](../../language-tools-and-standard-library/basics/interfaces/data_types/README.md); * the keyword `type` allows for the definition of structured data types; -* an operation message type is just a data type associated with it into the definition of the operation. As an example the request message of operation `sum` is `SumRequest` whereas the reply is just a `double`; +* an operation message type is just a data type associated with it into the definition of the operation. As an example the request message of operation `sum` is `SumRequest` whereas the reply is just a `int`; * a data type structure in Jolie represents a tree of nodes. As an example, type `DivRequest` contains two subnodes named `dividend` and `divisor` respectively. Both of them are `double`; -* a node in a data structure can be a vector. As an example node `term` of type `SumRequest` is a vector of `double`. `[1,*]` stands for: minimum occurrences 1 and maximum occurrences infinite. We read `term[1,*]:double` as an unbounded vector of double with at least one element; +* a node in a data structure can be a vector. As an example node `term` of type `SumRequest` is a vector of `int`. `[1,*]` stands for: minimum occurrences 1 and maximum occurrences infinite. We read `term[1,*]:int` as an unbounded vector of int with at least one element; ## Program and run a service From 528fc2f6e85a230532b655ca457689b93d29b806 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 1 Oct 2024 11:11:12 +0200 Subject: [PATCH 12/17] fix explanation --- src/tutorials/getting-started/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tutorials/getting-started/README.md b/src/tutorials/getting-started/README.md index 587bf027..7b7c9c15 100644 --- a/src/tutorials/getting-started/README.md +++ b/src/tutorials/getting-started/README.md @@ -64,9 +64,9 @@ Some interesting things to note: * in Jolie there are basic data types as integers, string, double, etc. In the example we exploit `int` (integers) for all the operations with the exception of operations multiplication and division where we use type `double`. You can check the other basic types [here](../../language-tools-and-standard-library/basics/interfaces/data_types/README.md); * the keyword `type` allows for the definition of structured data types; -* an operation message type is just a data type associated with it into the definition of the operation. As an example the request message of operation `sum` is `SumRequest` whereas the reply is just a `double`; +* an operation message type is just a data type associated with it into the definition of the operation. As an example the request message of operation `sum` is `SumRequest` whereas the reply is just a `int`; * a data type structure in Jolie represents a tree of nodes. As an example, type `DivRequest` contains two subnodes named `dividend` and `divisor` respectively. Both of them are `double`; -* a node in a data structure can be a vector. As an example node `term` of type `SumRequest` is a vector of `double`. `[1,*]` stands for: minimum occurrences 1 and maximum occurrences infinite. We read `term[1,*]:double` as an unbounded vector of double with at least one element; +* a node in a data structure can be a vector. As an example node `term` of type `SumRequest` is a vector of `int`. `[1,*]` stands for: minimum occurrences 1 and maximum occurrences infinite. We read `term[1,*]:int` as an unbounded vector of int with at least one element; ## Program and run a service From 1f036f422cf3222201f93998b918f418e3de77f7 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Thu, 17 Oct 2024 13:37:30 +0200 Subject: [PATCH 13/17] add workflow name --- .github/workflows/trigger.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/trigger.yml b/.github/workflows/trigger.yml index 7fb8b8b8..4afbface 100644 --- a/.github/workflows/trigger.yml +++ b/.github/workflows/trigger.yml @@ -1,3 +1,5 @@ +name: "Trigger" + on: push: branches: From d446c0bb755095492e341cdd7720be5ace713efd Mon Sep 17 00:00:00 2001 From: Claudio Guidi Date: Thu, 31 Oct 2024 14:43:02 +0100 Subject: [PATCH 14/17] added example with scheduler for tutorial --- src/SUMMARY.md | 1 + .../standard-library/scheduler/README.md | 72 ++++++++++++++++++ .../standard-library/scheduler/scheduler | 1 + .../standard-library/scheduler/scheduler.png | Bin 0 -> 32494 bytes 4 files changed, 74 insertions(+) create mode 100644 src/tutorials/standard-library/scheduler/README.md create mode 100644 src/tutorials/standard-library/scheduler/scheduler create mode 100644 src/tutorials/standard-library/scheduler/scheduler.png diff --git a/src/SUMMARY.md b/src/SUMMARY.md index c2e56cdc..492cfd0c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -19,6 +19,7 @@ - [JSON files](tutorials/standard-library/files/json/README.md) - [XML files](tutorials/standard-library/files/xml/README.md) - [Building a File Uploader Service](tutorials/file-uploader/README.md) + - [Scheduler](tutorials/standard-library/scheduler/README.md) - [Integration Scenarios](tutorials/twitter-api/README.md) - [Twitter API](tutorials/twitter-api/README.md) - [Advanced Scenarios](tutorials/advanced-scenarios/supporting-new-protocols-in-jolie/README.md) diff --git a/src/tutorials/standard-library/scheduler/README.md b/src/tutorials/standard-library/scheduler/README.md new file mode 100644 index 00000000..10069261 --- /dev/null +++ b/src/tutorials/standard-library/scheduler/README.md @@ -0,0 +1,72 @@ +# Using cron scheduler + +In this section we provide an example on how to use the scheduler library for setting cron jobs in Jolie. +Before showing the example, leu us show the target architecture. + +![scheduler.png](scheduler.png) + +The test service embeds `Scheduler` imported from package `scheduler`. +THe Scheduler Service can be programmed by setting the OneWay operation wbere receiving the alarms when they are triggered by the jobs. The jobs can be added and deleted easily, by using the API offered by the Scheduler Service. + +In the following example we report the code. Juts run it with the following command: +``` +jolie test.ol +``` + +A job which runs every minute will trigegr the alarm, and a message with the job name and the group name will be printed out. + +``` +from scheduler import Scheduler // imported the Scheduler +from console import Console + +type SchedulerCallBackRequest: void { + .jobName: string + .groupName: string +} + +interface SchedulerCallBackInterface { +OneWay: + schedulerCallback( SchedulerCallBackRequest ) // definition of the call-back operation +} + +service Test { + + execution: concurrent + + embed Scheduler as Scheduler // embedding the scheduler service + embed Console as Console + + + // internal input port for receiving alarms from Scheduler + inputPort MySelf { + location: "local" + interfaces: SchedulerCallBackInterface + } + + init { + // setting the name of the callback operation + setCallbackOperation@Scheduler( { operationName = "schedulerCallback" }) + // setting cronjob + setCronJob@Scheduler( { + jobName = "myjobname" + groupName = "myGroupName" + cronSpecs << { + second = "0" + minute = "0/1" + hour = "*" + dayOfMonth = "1/1" + month = "*" + dayOfWeek = "?" + year = "*" + } + })() + enableTimestamp@Console( true )() + } + + main { + [ schedulerCallback( request ) ] { + println@Console( request.jobName + "/" + request.groupName )() + } + } +} +``` \ No newline at end of file diff --git a/src/tutorials/standard-library/scheduler/scheduler b/src/tutorials/standard-library/scheduler/scheduler new file mode 100644 index 00000000..f3b656fa --- /dev/null +++ b/src/tutorials/standard-library/scheduler/scheduler @@ -0,0 +1 @@ +5VhRc5s4EP41fnQGIQT2Y+w0ubm5dtJxZ9o+KiAbzWFEZRHb+fVdgWRA4Itztttp6xdLq9Ui7fd9K8EIz9e7B0mL9L1IWDbyvWQ3wncj30eYhPCnLfvaMolwbVhJnhinxrDgL8wYPWMtecI2HUclRKZ40TXGIs9ZrDo2KqXYdt2WIus+taAr1jMsYpr1rZ95olKzCz9q7H8xvkrtk1E4rUfW1DqbnWxSmohty4TfjfBcCqHq1no3Z5lOns1LPe/+yOhhYZLl6pQJDx9eAvU+vf/4KMhDPv6I/A9fxybKM81Ks2GzWLW3GYB1F7qpAGD2InS4WcEkXzPFZNv+2Bhn25QrtihorGduwQNsqVpn0EPQXPIds2DrvhSKKi5y6I6nXuWQZXORCVmtAS+XSz+Owb5RUvzLWiNJ+BQCx2CkjkYItM2mmFRsdzRb6IABkJcJWLncg4ud4IU3k0k9y1AXY3yDDHu3DRdwRGpb2uIBUOTG2qmh4OrwkAYlaBig3gCaPwBamCmdNgG7a6MXfiuFHRjXKboFBz8odlWe7Di0Vvr/E9voAAsmnzlgZ8LCKuvItVOPIpBm1QWYZnyl0Ywh3RUhNBgcZHVrBtY8SfT0mWSwLPpUhdLIF4LnqsoYmY3InY5VKrFpuNKlQC5y5vDFmC5AgkMV2ltUvR78iHgD8HtXgh7/Knpl4RG9RtMnz2v06kc3F1Is8bpg4QgkGPbw8smAXA8gXhww8jpgMhXrp3JzAgqgQQOCHwwlF+xzbwCOe/hV9ksURps/k+bAJ70cD6X4ahkOz66G6Fg1/EdAxdLPz4tSRyqEVL90TXQZdIUaGeCBGokGamRwLUJE1zseF3HKkjID9Hzvb/pMf4dzssUJdCFOuKXYj/qc8MMBTuBrcWLyehlWktN8VeX63Do88z1vqA4zgoLaDhG611v4XSb3gavHgTsLHkh9CAcxulL2p7/bIUiwm+TBu8YPPQct7n8AxyOnvgSoIe9PpDk64W2a5cmt/iyha35GNxsed/MuRZknLDFF3kWB7bj6Yjx1+6v2qy7Qune3M9Oqzt52ctjbl3anNUt3m2lVz86rl86S3vcRByXYnihlzE6gpqJyxdRrt+U+7G1JDWBqbZJl8Fby3F3vEMrmCY/6CG1YNXFYFSJHqvU+zaz2lxY3EOkGIqETqM5DLxAQg+5bbuaIP7rgKHRkQLz/XJfrb2V01P8sd2c10Kj31+jrgPAZkjvhhfhMyVn5oLfJx0rVe4NULyi56YmKm/xMxY2Rq5T/KzkoMQ77TtTc60SEbvORtnZvPnXjd98B \ No newline at end of file diff --git a/src/tutorials/standard-library/scheduler/scheduler.png b/src/tutorials/standard-library/scheduler/scheduler.png new file mode 100644 index 0000000000000000000000000000000000000000..9e1e6cd11545834f786b6d5f650b9d2ef0491141 GIT binary patch literal 32494 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 literal 0 HcmV?d00001 From f0251ad5375915fd251e10a70a8630fb0381dc21 Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 10 Dec 2024 14:39:24 +0100 Subject: [PATCH 15/17] update fold option --- book.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/book.toml b/book.toml index d59e6dda..c4f943fe 100644 --- a/book.toml +++ b/book.toml @@ -25,5 +25,6 @@ edit-url-template = "https://github.com/jolie/docs/edit/v1.12.x/{path}" enable = true woff = true -# [output.html.fold] -# enable = true +[output.html.fold] +enable = true # whether or not to enable section folding +level = 1 # the depth to start folding From ab5479630e03b0623792530a04ce823b0d34fb1c Mon Sep 17 00:00:00 2001 From: Narongrit Unwerawattana Date: Tue, 10 Dec 2024 14:39:24 +0100 Subject: [PATCH 16/17] update fold option --- book.toml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/book.toml b/book.toml index 7d59f199..adb41390 100644 --- a/book.toml +++ b/book.toml @@ -25,5 +25,6 @@ edit-url-template = "https://github.com/jolie/docs/edit/v1.11.x/{path}" enable = true woff = true -# [output.html.fold] -# enable = true +[output.html.fold] +enable = true # whether or not to enable section folding +level = 1 # the depth to start folding From 7b8d619324211618ad438a971eb899ac94c7e04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Walln=C3=B6fer?= Date: Tue, 18 Feb 2025 21:37:39 +0100 Subject: [PATCH 17/17] rest/README.md - default operation to avoid HTTP 500 status codes --- src/language-tools-and-standard-library/rest/README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/language-tools-and-standard-library/rest/README.md b/src/language-tools-and-standard-library/rest/README.md index a6edbf83..a6da0249 100644 --- a/src/language-tools-and-standard-library/rest/README.md +++ b/src/language-tools-and-standard-library/rest/README.md @@ -34,7 +34,8 @@ RequestResponse: listUsers( ListUsersRequest )( ListUsersResponse ), viewUser( UserRequest )( User ) throws UserNotFound( string ), updateUser( UserWithUsername )( void ) throws UserNotFound( string ), - deleteUser( UserRequest )( void ) throws UserNotFound( string ) + deleteUser( UserRequest )( void ) throws UserNotFound( string ), + default( undefined )( string ) } service App { @@ -74,6 +75,7 @@ service App { statusCodes.UserNotFound = 404 } } + default = "default" } interfaces: UsersInterface } @@ -134,6 +136,8 @@ service App { throw( UserNotFound, request.username ) } } ] + + [ default( )( "API listens under /api/user/..." ) ] } } ``` @@ -144,6 +148,8 @@ For example, operation `viewUser` is configured to use: - `/api/user` as URI template, by `template = "/api/user"`. See the [official RFC on URI templates](https://www.rfc-editor.org/rfc/rfc6570) for more information about them. - GET as HTTP method, by `method = "get"`. +The `default` operation (optional) gets called when no operation matches to avoid getting HTTP 500 status codes. + ## Adding a router Following this approach, a specific http router, called _jester_, is introduced between the caller and the Jolie service to expose as a REST service. The http router is in charge to convert all the rest calls into the corresponding Jolie operations.