chore: added a task to generate runtimes.json according to current tag

chore: added task render-runtimes to generate a runtimes.json tarting from current tag

chore: fix typo in taskfile

chore: updates to README

chore: added actions to push runtimes.json update

chore: fix syntax error in image action

chore: ignoring license in runtimes.json'

chore: testing github action to create PR

chore: removed deps from runtime action

chore: testing runtime.build action

chore: testing on local runtime repos

chore: testing PR action

chore: removed runtime.yaml
diff --git a/.github/workflows/common.yaml b/.github/workflows/common.yaml
index e31202a..9d74432 100644
--- a/.github/workflows/common.yaml
+++ b/.github/workflows/common.yaml
@@ -58,15 +58,5 @@
         uses: docker/setup-qemu-action@v3
       - name: Set up Docker Buildx
         uses: docker/setup-buildx-action@v3
-      #- name: Build and push
-      #  uses: docker/build-push-action@v5
-      #  with:
-      #    #context: ./runtime/common/${{ env.IMG_TAG }}          
-      #    context: ./runtime/common/common1.17.1          
-      #    platforms: linux/amd64,linux/arm64
-      #    tags: apache/openserverless-runtime-common:${{ env.IMG_TAG }}
-      #    # For pull requests, export results to the build cache.
-      #    # Otherwise, push to a registry.
-      #    outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}
       - name: Image
         run: task build-common PUSH=true
\ No newline at end of file
diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml
index 87f2cc3..b30afa2 100644
--- a/.github/workflows/image.yaml
+++ b/.github/workflows/image.yaml
@@ -79,7 +79,7 @@
           context: ./runtime/go/${{ matrix.version }}
           platforms: linux/amd64,linux/arm64
           tags: ${{ env.BASE_REPO }}/openserverless-runtime-go:${{ matrix.version }}-${{ env.IMG_TAG }}
-          build-args: COMMON=registry.hub.docker.com/sciabarracom/openserverless-runtime-common:common1.17.1
+          build-args: COMMON=registry.hub.docker.com/apache/openserverless-runtime-common:common1.17.1
           # For pull requests, export results to the build cache.
           # Otherwise, push to a registry.
           outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}
@@ -135,7 +135,7 @@
             context: ./runtime/python/${{ matrix.version }}
             platforms: linux/amd64,linux/arm64
             tags: ${{ env.BASE_REPO }}/openserverless-runtime-python:${{ matrix.version }}-${{ env.IMG_TAG }}
-            build-args: COMMON=registry.hub.docker.com/sciabarracom/openserverless-runtime-common:common1.17.1
+            build-args: COMMON=registry.hub.docker.com/apache/openserverless-runtime-common:common1.17.1
             # For pull requests, export results to the build cache.
             # Otherwise, push to a registry.
             outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}          
@@ -191,10 +191,10 @@
           context: ./runtime/nodejs/${{ matrix.version }}
           platforms: linux/amd64,linux/arm64
           tags: ${{ env.BASE_REPO }}/openserverless-runtime-nodejs:${{ matrix.version }}-${{ env.IMG_TAG }}
-          build-args: COMMON=registry.hub.docker.com/sciabarracom/openserverless-runtime-common:common1.17.1
+          build-args: COMMON=registry.hub.docker.com/apache/openserverless-runtime-common:common1.17.1
           # For pull requests, export results to the build cache.
           # Otherwise, push to a registry.
-          outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}   
+          outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }} 
           
   php:
       name: Build Php
@@ -247,7 +247,7 @@
             context: ./runtime/php/${{ matrix.version }}
             platforms: linux/amd64,linux/arm64
             tags: ${{ env.BASE_REPO }}/openserverless-runtime-php:${{ matrix.version }}-${{ env.IMG_TAG }}
-            build-args: COMMON=registry.hub.docker.com/sciabarracom/openserverless-runtime-common:common1.17.1
+            build-args: COMMON=registry.hub.docker.com/apache/openserverless-runtime-common:common1.17.1
             # For pull requests, export results to the build cache.
             # Otherwise, push to a registry.
-            outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}           
\ No newline at end of file
+            outputs: ${{ github.event_name == 'pull_request' && 'type=cacheonly' || 'type=registry,push=true' }}       
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index ae1a095..55076d9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -93,3 +93,5 @@
 .env.src
 
 openserverless-runtimes
+
+runtimes.json
diff --git a/.licenserc.yaml b/.licenserc.yaml
index a41e536..ea81980 100644
--- a/.licenserc.yaml
+++ b/.licenserc.yaml
@@ -45,3 +45,5 @@
     - '.env.dist'
     - '**/.npmrc'
     - 'customkitd.toml'
+    - 'runtimes.json'
+    - 'runtimes.json.tpl'
diff --git a/README.md b/README.md
index 5ce7987..0f63d0a 100644
--- a/README.md
+++ b/README.md
@@ -40,4 +40,13 @@
 
 Then you can build a single runtime specifingh the dir:
 
-Build a single runtime: `task build-runtime RT=nodejs VER=v18`
\ No newline at end of file
+Build a single runtime: `task build-runtime RT=nodejs VER=v18`
+
+# How to generate a new runtimes.json
+
+The project contains a `runtimes.json.tpl` with specific placeholder for managed Apache OpenServerless runtimes. To regenerate a newer `runtimes.json` from the current TAG
+and assuming that the images have been effectively pushed to the Official DockerHub repositories under the apache account use the command:
+
+`task render-runtimes`
+
+This will create a new `runtimes.json` that can be pushed to the official Apache OpenServerless [task](https://github.com/apache/openserverless-task) repo.
\ No newline at end of file
diff --git a/Taskfile.yml b/Taskfile.yml
index ae6511f..dcabf99 100644
--- a/Taskfile.yml
+++ b/Taskfile.yml
@@ -23,7 +23,8 @@
   DRY: ""
   PUSH: ""
   BASETAG: ""
-  BASEIMG: registry.hub.docker.com/apache
+  REPO_PATH: apache
+  BASEIMG: registry.hub.docker.com/{{.REPO_PATH}}
   COMMON_VER: common1.17.1
   COMMON: "{{.BASEIMG}}/openserverless-runtime-common:{{.COMMON_VER}}"
   TAG:
@@ -171,4 +172,69 @@
   invoke:
     desc: invoke a runtime listening in port 8080, optionally with J=<json>
     cmds:
-    - python3 packages/invoke.py run '{{.J}}'
\ No newline at end of file
+    - python3 packages/invoke.py run '{{.J}}'
+
+
+  render-runtime:
+    requires: { vars: [RT, VER] } 
+    dir: "runtime/{{.RT}}/{{.VER}}"
+    cmds:
+    - |
+      BASEIMG=$(echo "${MY_DOCKER_HUB_REGISTRY:-$DOCKER_HUB_REGISTRY}")
+      RUNTIME="{{.BASEIMG}}/openserverless-runtime-{{.RT}}:{{.VER}}-{{.TAG}}"
+      ENVVER=$(echo "{{.VER}}" | tr '.' '_' | tr '[:upper:][:lower:]' '[:lower:][:upper:]')
+      ENVRT=$(echo "{{.RT}}" | tr '[a-zA-Z]' '[A-Za-z]')    
+      if test -n "{{.PUSH}}"
+      then 
+        {{.DRY}} echo "OPS_RUNTIME_TAG_${ENVRT}_${ENVVER}={{.VER}}-{{.TAG}}"  >> {{.BASE_DIR}}/runtimes.env
+      else {{.DRY}} echo "OPS_RUNTIME_TAG_${ENVRT}_${ENVVER}={{.VER}}-{{.TAG}}"
+      fi
+      echo "Rendered $RUNTIME"
+
+  render-lang:
+    desc: render images for one runtime
+    requires: {vars: [RT,BASE_DIR] }
+    vars:
+      DIRS:
+        sh: ls -d  runtime/{{.RT}}/v* || echo ""
+    cmds:
+      - for: { var: DIRS }
+        task: render-runtime
+        vars:
+          VER: "{{base .ITEM}}"
+          BASE_DIR: "{{.BASE_DIR}}"
+
+  render:
+    silent: true
+    requires: { vars: [TAG,RUNTIMES] } 
+    vars:
+      RT_REGEX:
+        sh: echo "{{.RUNTIMES}}" | tr ',' '|'
+      SPECIFIC_RT:
+        sh: echo "{{.TAG}}" | grep -E -o '({{.RT_REGEX}})' || echo ''
+      BASE_DIR:
+        sh: pwd  
+    cmds:
+      - |      
+        rm -f runtimes.env
+        echo "OPS_RUNTIME_PREFIX={{.REPO_PATH}}" >> runtimes.env
+        echo "==> RENDERING RUNTIMES {{.RUNTIMES}}"
+        for ITEM in `echo {{.RUNTIMES}} | tr ',' ' '`; do
+          echo "==> RENDERINGG $ITEM:{{.TAG}}"
+          task render-lang RT=$ITEM PUSH="{{.PUSH}}" DRY={{.DRY}} BASE_DIR="{{.BASE_DIR}}"       
+        done
+
+  generate-runtimes:
+    silent: true
+    dotenv: 
+      - runtimes.env
+    cmds:
+      - cat runtimes.json.tpl | envsubst  > runtimes.json
+
+  render-runtimes:
+    silent: true
+    desc: generate a runtimes.json file with all the runtime corresponding to the current TAG
+    cmds:
+      - |
+        task render PUSH=y
+        task generate-runtimes      
diff --git a/runtime/java/v11/Dockerfile b/runtime/java/v11/Dockerfile
index fbcfcab..67e06ff 100644
--- a/runtime/java/v11/Dockerfile
+++ b/runtime/java/v11/Dockerfile
@@ -56,5 +56,5 @@
 ENV OW_COMPILER=/bin/compile
 ENV OW_SAVE_JAR=exec.jar
 # using the runtime name to identify the execution environment
-ENV OW_EXECUTION_ENV=apacheopenserverless/action-java-v11
+ENV OW_EXECUTION_ENV=openserverless-runtime-java/v11
 ENTRYPOINT /bin/proxy
diff --git a/runtime/java/v17/Dockerfile b/runtime/java/v17/Dockerfile
index 889f557..0f8d442 100644
--- a/runtime/java/v17/Dockerfile
+++ b/runtime/java/v17/Dockerfile
@@ -56,5 +56,5 @@
 ENV OW_COMPILER=/bin/compile
 ENV OW_SAVE_JAR=exec.jar
 # using the runtime name to identify the execution environment
-ENV OW_EXECUTION_ENV=apacheopenserverless/action-java-v17
+ENV OW_EXECUTION_ENV=openserverless-runtime-java/v17
 ENTRYPOINT /bin/proxy
diff --git a/runtime/java/v21/Dockerfile b/runtime/java/v21/Dockerfile
index 313fade..1849ee9 100644
--- a/runtime/java/v21/Dockerfile
+++ b/runtime/java/v21/Dockerfile
@@ -56,5 +56,5 @@
 ENV OW_COMPILER=/bin/compile
 ENV OW_SAVE_JAR=exec.jar
 # using the runtime name to identify the execution environment
-ENV OW_EXECUTION_ENV=apacheopenserverless/action-java-v21
+ENV OW_EXECUTION_ENV=openserverless-runtime-java/v21
 ENTRYPOINT /bin/proxy
diff --git a/runtime/java/v8/Dockerfile b/runtime/java/v8/Dockerfile
index 5e58664..0863170 100644
--- a/runtime/java/v8/Dockerfile
+++ b/runtime/java/v8/Dockerfile
@@ -56,5 +56,5 @@
 ENV OW_COMPILER=/bin/compile
 ENV OW_SAVE_JAR=exec.jar
 # using the runtime name to identify the execution environment
-ENV OW_EXECUTION_ENV=apacheopenserverless/action-java-v8
+ENV OW_EXECUTION_ENV=openserverless-runtime-java/v8
 ENTRYPOINT /bin/proxy
diff --git a/runtimes.json.tpl b/runtimes.json.tpl
new file mode 100644
index 0000000..5bfd41e
--- /dev/null
+++ b/runtimes.json.tpl
@@ -0,0 +1,363 @@
+{
+    "description": [
+        "This file describes the different languages (aka. managed action runtimes) supported by the system",
+        "as well as blackbox images that support the runtime specification.",
+        "Only actions with runtime families / kinds defined here can be created / read / updated / deleted / invoked.",
+        "Define a list of runtime families (example: 'nodejs') with at least one kind per family (example: 'nodejs:14').",
+        "Each runtime family needs a default kind (default: true).",
+        "When removing or renaming runtime families or runtime kinds from this file, preexisting actions",
+        "with the affected kinds can no longer be read / updated / deleted / invoked. In order to remove or rename",
+        "runtime families or runtime kinds, mark all affected runtime kinds as deprecated (deprecated: true) and",
+        "perform a manual migration of all affected actions.",
+        "",
+        "This file is meant to list all stable runtimes supported by the Apache Openwhisk community."
+    ],
+    "runtimes": {
+        "nodejs": [
+            {
+                "kind": "nodejs:21",
+                "default": true,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-nodejs",
+                    "tag": "$OPS_RUNTIME_TAG_NODEJS_V21"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },                
+                "stemCells": [
+                    {
+                        "initialCount": 1,
+                        "memory": "256 MB",
+                        "reactive": {
+                            "minCount": 1,
+                            "maxCount": 4,
+                            "ttl": "2 minutes",
+                            "threshold": 1,
+                            "increment": 1
+                        }
+                    }
+                ]
+            },            
+            {
+                "kind": "nodejs:20",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-nodejs",
+                    "tag": "$OPS_RUNTIME_TAG_NODEJS_V20"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "nodejs:18",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-nodejs",
+                    "tag": "$OPS_RUNTIME_TAG_NODEJS_V18"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }           
+        ],
+        "python": [
+            {
+                "kind": "python:3",
+                "default": true,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-python",
+                    "tag": "$OPS_RUNTIME_TAG_PYTHON_V3_12"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "stemCells": [
+                    {
+                        "initialCount": 1,
+                        "memory": "256 MB",
+                        "reactive": {
+                            "minCount": 1,
+                            "maxCount": 4,
+                            "ttl": "2 minutes",
+                            "threshold": 1,
+                            "increment": 1
+                        }
+                    }
+                ]
+            },
+            {
+                "kind": "python:3.11",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-python",
+                    "tag": "$OPS_RUNTIME_TAG_PYTHON_V3_11"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "python:3.12",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-python",
+                    "tag": "$OPS_RUNTIME_TAG_PYTHON_V3_12"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "python:3.11ca",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-python",
+                    "tag": "$OPS_RUNTIME_TAG_PYTHON_V3_11CA"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "python:310",
+                "default": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-python",
+                    "tag": "$OPS_RUNTIME_TAG_PYTHON_V3_10"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }
+        ],
+        "go": [
+            {
+                "kind": "go:1.22",
+                "default": true,
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-go",
+                    "tag": "$OPS_RUNTIME_TAG_GO_V1_22"
+                }
+            },
+            {
+                "kind": "go:1.21",
+                "default": false,
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-go",
+                    "tag": "$OPS_RUNTIME_TAG_GO_V1_21"
+                }
+            },
+            {
+                "kind": "go:1.20",
+                "default": false,
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-go",
+                    "tag": "$OPS_RUNTIME_TAG_GO_V1_20"
+                }
+            },            
+            {
+                "kind": "go:1.20mf",
+                "default": false,
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "image": {
+                    "prefix": "ghcr.io/nuvolaris",
+                    "name": "go-nuvolaris-metaflow",
+                    "tag": "bc86ab6"
+                }
+            }            
+        ],
+        "java": [
+            {
+                "kind": "java:8",
+                "default": true,
+                "image": {
+                    "prefix": "ghcr.io/nuvolaris",
+                    "name": "action-java-v8",
+                    "tag": "0.3.0-morpheus.22110809"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "requireMain": true
+            }
+        ],
+        "php": [
+            {
+                "kind": "php:8.3",
+                "default": true,
+                "deprecated": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-php",
+                    "tag": "$OPS_RUNTIME_TAG_PHP_V8_3"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },            
+            {
+                "kind": "php:8.2",
+                "default": false,
+                "deprecated": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-php",
+                    "tag": "$OPS_RUNTIME_TAG_PHP_V8_2"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "php:8.1",
+                "default": false,
+                "deprecated": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-php",
+                    "tag": "$OPS_RUNTIME_TAG_PHP_V8_1"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "php:8.0",
+                "default": false,
+                "deprecated": false,
+                "image": {
+                    "prefix": "$OPS_RUNTIME_PREFIX",
+                    "name": "openserverless-runtime-php",
+                    "tag": "$OPS_RUNTIME_TAG_PHP_V8_0"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }
+        ],
+        "ruby": [
+            {
+                "kind": "ruby:2.5",
+                "default": true,
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                },
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-ruby-v2.5",
+                    "tag": "nightly"
+                }
+            }
+        ],
+        "dotnet": [
+            {
+                "kind": "dotnet:2.2",
+                "default": true,
+                "deprecated": false,
+                "requireMain": true,
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-dotnet-v2.2",
+                    "tag": "nightly"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            },
+            {
+                "kind": "dotnet:3.1",
+                "default": false,
+                "deprecated": false,
+                "requireMain": true,
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-dotnet-v3.1",
+                    "tag": "nightly"
+                },
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }
+        ],
+        "rust": [
+            {
+                "kind": "rust:1.34",
+                "default": true,
+                "image": {
+                    "prefix": "openwhisk",
+                    "name": "action-rust-v1.34",
+                    "tag": "nightly"
+                },
+                "deprecated": false,
+                "attached": {
+                    "attachmentName": "codefile",
+                    "attachmentType": "text/plain"
+                }
+            }
+        ]
+    },
+    "blackboxes": [
+        {
+            "prefix": "openwhisk",
+            "name": "dockerskeleton",
+            "tag": "nightly"
+        }
+    ]
+}
\ No newline at end of file