From 3340bd853894563508f91d73b123c97f662fa0c6 Mon Sep 17 00:00:00 2001 From: Jacob Wallraff Date: Thu, 15 Dec 2022 15:38:16 -0800 Subject: [PATCH] Turn ports into arrays and restrict context to port mappings --- .../src/context-providers/job.ts | 14 ++++++++++---- .../src/validate.expressions.test.ts | 4 +++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/actions-languageservice/src/context-providers/job.ts b/actions-languageservice/src/context-providers/job.ts index 8ad8fda..1cc9ccd 100644 --- a/actions-languageservice/src/context-providers/job.ts +++ b/actions-languageservice/src/context-providers/job.ts @@ -48,13 +48,19 @@ function createContainerContext(container: MappingToken, isServices: boolean): d else if (isSequence(token.value)) { // ports and volumes // service ports are the only thing that is part of the job context - const sequence = new data.Array(); + if (token.key.toString() !== "ports") { + continue; + } + const ports = new data.Dictionary() for (const item of token.value) { - if (item.toString() === "ports" && isServices) { - sequence.add(new data.StringData(item.toString())); + // We can determine the context mapping fully only if the port is defined + // as a mapping (i.e. :), single ports are assigned randomly + const portParts = item.toString().split(":") + if (isServices && portParts.length === 2) { + ports.add(portParts[1], new data.StringData(portParts[0])); } } - containerContext.add(token.key.toString(), new data.Array(sequence)); + containerContext.add(token.key.toString(), ports); } else if (isMapping(token.value)) { // credentials and env diff --git a/actions-languageservice/src/validate.expressions.test.ts b/actions-languageservice/src/validate.expressions.test.ts index a6e7499..8e7f6fe 100644 --- a/actions-languageservice/src/validate.expressions.test.ts +++ b/actions-languageservice/src/validate.expressions.test.ts @@ -269,8 +269,10 @@ jobs: services: nginx: image: node:14.16 + volumes: + - my_docker_volume:/volume_mount ports: - - 80 + - 80:8080 steps: - run: echo \${{ job.services.nginx }} - run: echo \${{ job.services.nginx.id }}