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

feat: new permission system #5674

Draft
wants to merge 12 commits into
base: rfc-permission-overhaul
Choose a base branch
from

Conversation

n1ru4l
Copy link
Collaborator

@n1ru4l n1ru4l commented Oct 15, 2024

Background

See #5668

Description

This PR introduces the new hive resource identifier format for the GraphQL API service and translates legacy permissions (super tokens session + registry access tokens) to the new format.

It is one step for gradually introducing the new organization scoped access tokens and further rolling out this new permission system to all other services.

Hive Resource Identifier Specification

hrn:<organization id>:<resource type>/<resource scope>

hrn : Prefix (Hive Resource Identifier)

<organization id> : ID of the organization

<resource type : The resource type, currently either target, organization , project, cdn , permissions, or users

<resource scope> : a way to scope to a specific target or project, usually a UUID, but can also be a more complex path that is separated by / .

Checklist

  • Input validation
  • Output encoding
  • Authentication management
  • Session management
  • Access control
  • Cryptographic practices
  • Error handling and logging
  • Data protection
  • Communication security
  • System configuration
  • Database security
  • File management
  • Memory management
  • Testing

Copy link
Contributor

github-actions bot commented Oct 15, 2024

🐋 This PR was built and pushed to the following Docker images (tag: cb209f0f0df6d65ee702f72d3acf6e2d420aca3d):

Docker Bake metadata
{
"app": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/oidhitk9hzq28weotekoyf4ib",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:d8613c1653d63f9f8eadc31a0d90ffb323fe501397a1202483f29955bfc8018e",
    "size": 685
  },
  "containerimage.digest": "sha256:d8613c1653d63f9f8eadc31a0d90ffb323fe501397a1202483f29955bfc8018e",
  "image.name": "ghcr.io/graphql-hive/app:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/app:feat_granular_permission_layer"
},
"buildx.build.warnings": [
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMik=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIxKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 21
        },
        "end": {
          "line": 21
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRQT1JUJyAobGluZSAyMik=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 22
        },
        "end": {
          "line": 22
        }
      }
    ]
  },
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTUp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 15
        },
        "end": {
          "line": 15
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIwKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 20
        },
        "end": {
          "line": 20
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAyMSk=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 21
        },
        "end": {
          "line": 21
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMyk=",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 13
        },
        "end": {
          "line": 13
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTQp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 14
        },
        "end": {
          "line": 14
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIyKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 22
        },
        "end": {
          "line": 22
        }
      }
    ]
  },
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEwKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 10
        },
        "end": {
          "line": 10
        }
      }
    ]
  },
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDExKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 11
        },
        "end": {
          "line": 11
        }
      }
    ]
  },
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEyKQ==",
    "detail": [
      "TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  },
  {
    "vertex": "sha256:ce4c5132096d53aeb79dedefd4df13c84bba7b1158fe5227f5c6183dd166ab17",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTcp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "migrations.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IGNhLWNlcnRpZmljYXRlcwoKV09SS0RJUiAvdXNyL3NyYy9hcHAKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkVOViBFTlZJUk9OTUVOVCBwcm9kdWN0aW9uCkVOViBOT0RFX0VOViBwcm9kdWN0aW9uCkVOViBSRUxFQVNFICRSRUxFQVNFCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 17
        },
        "end": {
          "line": 17
        }
      }
    ]
  },
  {
    "vertex": "sha256:93857d7023e2648cd0a67d2e8728a1e14f80c791a96d3eec2920e141aa78453a",
    "level": 1,
    "short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTIp",
    "detail": [
      "VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
    ],
    "url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
    "sourceInfo": {
      "filename": "services.dockerfile",
      "data": "RlJPTSBub2RlOjIyLjguMC1zbGltCgpSVU4gYXB0LWdldCB1cGRhdGUgJiYgYXB0LWdldCBpbnN0YWxsIC15IHdnZXQgY2EtY2VydGlmaWNhdGVzICYmIHJtIC1yZiAvdmFyL2xpYi9hcHQvbGlzdHMvKgoKQVJHIFNFUlZJQ0VfRElSX05BTUUKV09SS0RJUiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUKCkNPUFkgLS1mcm9tPWRpc3QgLiAvdXNyL3NyYy9hcHAvJFNFUlZJQ0VfRElSX05BTUUvCkNPUFkgLS1mcm9tPXNoYXJlZCAuIC8KCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5saWNlbnNlcz1NSVQKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnRpdGxlPSRJTUFHRV9USVRMRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVyc2lvbj0kUkVMRUFTRQpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuZGVzY3JpcHRpb249JElNQUdFX0RFU0NSSVBUSU9OCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5hdXRob3JzPSJUaGUgR3VpbGQiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZW5kb3I9IkthbWlsIEtpc2llbGEiCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS51cmw9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5zb3VyY2U9Imh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsLWhpdmUvcGxhdGZvcm0iCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQpFTlYgUE9SVCAkUE9SVAoKSEVBTFRIQ0hFQ0sgLS1pbnRlcnZhbD01cyBcCiAgLS10aW1lb3V0PTVzIFwKICAtLXN0YXJ0LXBlcmlvZD01cyBcCiAgLS1yZXRyaWVzPTYgXAogIENNRCAkSEVBTFRIQ0hFQ0tfQ01ECgpFTlRSWVBPSU5UIFsgIi9lbnRyeXBvaW50LnNoIiBdCg==",
      "language": "Dockerfile"
    },
    "range": [
      {
        "start": {
          "line": 12
        },
        "end": {
          "line": 12
        }
      }
    ]
  }
],
"composition-federation-2": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/s4cm5g66h1mn24y0p6ri11210",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:293f95838d769eccff6ef2985d9b991d6332c9fd801691e661b4a2da6a04c8fc",
    "size": 685
  },
  "containerimage.digest": "sha256:293f95838d769eccff6ef2985d9b991d6332c9fd801691e661b4a2da6a04c8fc",
  "image.name": "ghcr.io/graphql-hive/composition-federation-2:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/composition-federation-2:feat_granular_permission_layer"
},
"emails": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/s2fx21kgm7st6eb13zq2b2l5z",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:9dbe32652af667e74a7a476c1c2458f21691b44a6648dd4ac593fcf87881ca48",
    "size": 685
  },
  "containerimage.digest": "sha256:9dbe32652af667e74a7a476c1c2458f21691b44a6648dd4ac593fcf87881ca48",
  "image.name": "ghcr.io/graphql-hive/emails:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/emails:feat_granular_permission_layer"
},
"policy": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/o6xf0241lslxp1on3rz6d2ik3",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:e72669ae9da1d9248def2008bb245fb5ba2a719407ee378d1f00ea9991fff9fa",
    "size": 685
  },
  "containerimage.digest": "sha256:e72669ae9da1d9248def2008bb245fb5ba2a719407ee378d1f00ea9991fff9fa",
  "image.name": "ghcr.io/graphql-hive/policy:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/policy:feat_granular_permission_layer"
},
"rate-limit": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/ze2h75utpvjrp8lygk1oec0tb",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:f3a7aee4be522748ae118e8a2a5f5771768eac0ccdadb2e993d8958fa6df7f03",
    "size": 685
  },
  "containerimage.digest": "sha256:f3a7aee4be522748ae118e8a2a5f5771768eac0ccdadb2e993d8958fa6df7f03",
  "image.name": "ghcr.io/graphql-hive/rate-limit:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/rate-limit:feat_granular_permission_layer"
},
"schema": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/r48zfzonjzf33r38iakg63eak",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:76b0c1235eda7a6a54090e52dacd82139e8e716cddff54c8a4b5b961d069ed7c",
    "size": 685
  },
  "containerimage.digest": "sha256:76b0c1235eda7a6a54090e52dacd82139e8e716cddff54c8a4b5b961d069ed7c",
  "image.name": "ghcr.io/graphql-hive/schema:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/schema:feat_granular_permission_layer"
},
"server": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/5xes8kuj7pwpzbc2krf6mmgba",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:19ffe7fed86505f7cc9eeb3170e974638d4e19990524bd28cf21d743bbe3404e",
    "size": 685
  },
  "containerimage.digest": "sha256:19ffe7fed86505f7cc9eeb3170e974638d4e19990524bd28cf21d743bbe3404e",
  "image.name": "ghcr.io/graphql-hive/server:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/server:feat_granular_permission_layer"
},
"storage": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/503w4293e1614422xhehkmu6z",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:7bcaa971a37e0bf8be9b5fdb59b63490aaff046570bc85b9a075ea5d009315e9",
    "size": 685
  },
  "containerimage.digest": "sha256:7bcaa971a37e0bf8be9b5fdb59b63490aaff046570bc85b9a075ea5d009315e9",
  "image.name": "ghcr.io/graphql-hive/storage:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/storage:feat_granular_permission_layer"
},
"stripe-billing": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/sf6o86vcla7lh4souvcgaixpu",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:15c2a6cd49271ae846aac91c8144225c246959852804b8b3db840862966ddaa5",
    "size": 685
  },
  "containerimage.digest": "sha256:15c2a6cd49271ae846aac91c8144225c246959852804b8b3db840862966ddaa5",
  "image.name": "ghcr.io/graphql-hive/stripe-billing:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/stripe-billing:feat_granular_permission_layer"
},
"tokens": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/m6naqnrqrnxhb9c15jpefu3oz",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:423db20425a51ec74829127f1ebb98cc87edf0f36aa88eb050731ee089ddf2b3",
    "size": 685
  },
  "containerimage.digest": "sha256:423db20425a51ec74829127f1ebb98cc87edf0f36aa88eb050731ee089ddf2b3",
  "image.name": "ghcr.io/graphql-hive/tokens:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/tokens:feat_granular_permission_layer"
},
"usage": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/4pleh0zpudxw7l2b4c1o7ty62",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:cdde06be4187a366924a1f1c1cbdac2271da09fc3775d5e5aa2f51da6606938b",
    "size": 685
  },
  "containerimage.digest": "sha256:cdde06be4187a366924a1f1c1cbdac2271da09fc3775d5e5aa2f51da6606938b",
  "image.name": "ghcr.io/graphql-hive/usage:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/usage:feat_granular_permission_layer"
},
"usage-estimator": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/tnzbyzjg2a7x5uwhkenzedk5k",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:4be1d41e8ac67436094994eed1096f00d5518f6bcc83c582f3f96bfd37e529cb",
    "size": 685
  },
  "containerimage.digest": "sha256:4be1d41e8ac67436094994eed1096f00d5518f6bcc83c582f3f96bfd37e529cb",
  "image.name": "ghcr.io/graphql-hive/usage-estimator:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/usage-estimator:feat_granular_permission_layer"
},
"usage-ingestor": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/eqq7zuby5dt8ztwm2oceq1er8",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:856e16a9da29ab339740eba1352cf14f5122b81030a99b37d206b07ab1af4efe",
    "size": 685
  },
  "containerimage.digest": "sha256:856e16a9da29ab339740eba1352cf14f5122b81030a99b37d206b07ab1af4efe",
  "image.name": "ghcr.io/graphql-hive/usage-ingestor:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/usage-ingestor:feat_granular_permission_layer"
},
"webhooks": {
  "buildx.build.ref": "builder-199682c0-a089-4f9b-8f77-e186d5717750/builder-199682c0-a089-4f9b-8f77-e186d57177500/x5rabix5msq2r2zwz9vqrtakb",
  "containerimage.descriptor": {
    "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
    "digest": "sha256:39655959ffbe34af140bfabb18f4e84d58c85f0cd3655f3e4ae427b8ad7037ad",
    "size": 685
  },
  "containerimage.digest": "sha256:39655959ffbe34af140bfabb18f4e84d58c85f0cd3655f3e4ae427b8ad7037ad",
  "image.name": "ghcr.io/graphql-hive/webhooks:cb209f0f0df6d65ee702f72d3acf6e2d420aca3d,ghcr.io/graphql-hive/webhooks:feat_granular_permission_layer"
}
}

@n1ru4l n1ru4l force-pushed the feat-granular-permission-layer branch 4 times, most recently from f8e838b to 8e467c2 Compare October 15, 2024 10:43
@n1ru4l n1ru4l marked this pull request as draft October 21, 2024 09:42
@n1ru4l n1ru4l force-pushed the feat-granular-permission-layer branch from 8e467c2 to 1e4fbeb Compare October 21, 2024 10:06
@n1ru4l n1ru4l force-pushed the feat-granular-permission-layer branch from e03c912 to fbbdc3d Compare October 22, 2024 09:09
@n1ru4l n1ru4l force-pushed the feat-granular-permission-layer branch 2 times, most recently from d2c3178 to 01add13 Compare October 22, 2024 12:39
@n1ru4l n1ru4l force-pushed the feat-granular-permission-layer branch from 01add13 to fb1236f Compare October 22, 2024 12:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants