[
  {
    "path": ".github/CODEOWNERS",
    "content": "* @hashicorp/waypoint\n"
  },
  {
    "path": ".github/CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\nHashiCorp Community Guidelines apply to you when interacting with the community here on GitHub and contributing code.\n\nPlease read the full text at https://www.hashicorp.com/community-guidelines\n"
  },
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "# Contributing to Waypoint Examples\n\n>**Note:** We take Waypoint's security and our users' trust very seriously.\n>If you believe you have found a security issue in Waypoint, please responsibly\n>disclose by contacting us at security@hashicorp.com.\n\n**First:** if you're unsure or afraid of _anything_, just ask or submit the\nissue or pull request anyways. You won't be yelled at for giving your best\neffort. The worst that can happen is that you'll be politely asked to change\nsomething. We appreciate any sort of contributions, and don't want a wall of\nrules to get in the way of that.\n\nThat said, if you want to ensure that a pull request is likely to be merged,\ntalk to us! A great way to do this is in issues themselves. When you want to\nwork on an issue, comment on it first and tell us the approach you want to take.\n\n## Getting Started\n\n### Some Ways to Contribute\n\n* Report potential bugs.\n* Suggest product enhancements.\n* Increase our test coverage.\n* Fix a [bug](https://github.com/hashicorp/waypoint-examples/labels/bug).\n* Implement a requested [enhancement](https://github.com/hashicorp/waypoint-examples/labels/enhancement).\n* Improve our guides and documentation.\n\n### Reporting an Issue:\n\n>Note: Issues on GitHub for Waypoint are intended to be related to bugs or feature requests.\n>Questions should be directed to other community resources such as the [forum](https://discuss.hashicorp.com/)\n\n* Make sure you test against the latest released version. It is possible we\nalready fixed the bug you're experiencing. However, if you are on an older\nversion of Waypoint and feel the issue is critical, do let us know.\n\n* Check existing issues (both open and closed) to make sure it has not been\nreported previously.\n\n* Provide a reproducible test case. If a contributor can't reproduce an issue,\nthen it dramatically lowers the chances it'll get fixed. If we can't reproduce\nan issue long enough, we are usually forced to close the issue.\n\n* As part of the test case, please include any Waypoint configurations\n(`waypoint.hcl`), build configs such as Dockerfiles, etc. Log output with\nlog level set with verbose flags (at least `-vv`) is helpful too.\n\n* If the issue is related to the browser UI, please also include the name\nand version of the browser and any extensions that may be interacting\nwith the UI\n\n* Aim to respond promptly to any questions made by the Waypoint team on your\nissue. Stale issues will be closed.\n\n### Issue Lifecycle\n\n1. The issue is reported.\n\n2. The issue is verified and categorized by a Waypoint maintainer.\n   Categorization is done via tags. For example, bugs are tagged as \"bug\".\n\n3. Unless it is critical, the issue is left for a period of time (sometimes many\n   weeks or months), giving outside contributors a chance to address the issue\n   and our internal teams time to plan for inclusion in a release.\n\n4. The issue is addressed in a pull request or commit. The issue will be\n   referenced in the commit message so that the code that fixes it is clearly\n   linked.\n\n5. The issue is closed.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug report\nabout: Let us know about a bug!\ntitle: ''\nlabels: new\nassignees: ''\n\n---\n\n<!-- Please reserve GitHub issues for bug reports and feature requests.\n\nFor questions, the best place to get answers is on our [discussion forum](https://discuss.hashicorp.com/c/waypoint), as they will get more visibility from experienced users than the issue tracker.\n\nPlease note: We take Waypoint's security and our users' trust very seriously. If you believe you have found a security issue in Waypoint, please responsibly disclose by contacting us at security@hashicorp.com. Our PGP key is available at our security page: https://www.hashicorp.com/security/\n\n-->\n\n**Describe your environment**\nWhich example app are you having problems with?\n\n**Describe the bug**\nA clear and concise description of what the bug is.\n\n**Steps to Reproduce**\nSteps to reproduce the behavior. Please include any `waypoint.hcl` files\nif applicable.\n\n**Expected behavior**\nA clear and concise description of what you expected to happen.\n\n**Additional context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\ncontact_links:\n  - name: Ask a question\n    url: https://discuss.hashicorp.com/c/waypoint\n    about: For increased visibility, please post questions on the discussion forum.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature request\nabout: Suggest something!\ntitle: ''\nlabels: new\nassignees: ''\n\n---\n\n**Is your feature request related to a problem? Please describe.**\nA clear and concise description of what the problem is or why your proposed example\nshould be included. Ex. I'm always frustrated when [...]\n\n**Describe the example scenario you wish to be included**\nWhat technology are you hoping to add? What additional information or documentation\ncan you share to help us read up on your example app?\n\n**Describe the solution you'd like**\nA clear and concise description of what you want to happen.\n\n**Describe alternatives you've considered**\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Explain any additional use-cases**\nIf there are any use-cases that would help us understand the use/need/value please share them as they can help us decide on acceptance and prioritization.\n\n**Additional context**\nAdd any other context or screenshots about the feature request here.\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\ndata.db\n\n# Local .waypoint directories\n**/.waypoint/*\n\n# Local .terraform directories\n**/.terraform/*\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# Crash log files\ncrash.log\n\n# Ignore any .tfvars files that are generated automatically for each Terraform run. Most\n# .tfvars files are managed as part of configuration and so should be included in\n# version control.\n#\n# example.tfvars\n\n# Ignore override files as they are usually used to override resources locally and so\n# are not checked in\noverride.tf\noverride.tf.json\n*_override.tf\n*_override.tf.json\n\n# Include override files you do wish to add to version control using negated pattern\n#\n# !example_override.tf\n\n# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan\n# example: *tfplan*\n\n*.wpvars"
  },
  {
    "path": "LICENSE",
    "content": "Copyright (c) 2020 HashiCorp, Inc.\n\nMozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\"\n    means each individual or legal entity that creates, contributes to\n    the creation of, or owns Covered Software.\n\n1.2. \"Contributor Version\"\n    means the combination of the Contributions of others (if any) used\n    by a Contributor and that particular Contributor's Contribution.\n\n1.3. \"Contribution\"\n    means Covered Software of a particular Contributor.\n\n1.4. \"Covered Software\"\n    means Source Code Form to which the initial Contributor has attached\n    the notice in Exhibit A, the Executable Form of such Source Code\n    Form, and Modifications of such Source Code Form, in each case\n    including portions thereof.\n\n1.5. \"Incompatible With Secondary Licenses\"\n    means\n\n    (a) that the initial Contributor has attached the notice described\n        in Exhibit B to the Covered Software; or\n\n    (b) that the Covered Software was made available under the terms of\n        version 1.1 or earlier of the License, but not also under the\n        terms of a Secondary License.\n\n1.6. \"Executable Form\"\n    means any form of the work other than Source Code Form.\n\n1.7. \"Larger Work\"\n    means a work that combines Covered Software with other material, in\n    a separate file or files, that is not Covered Software.\n\n1.8. \"License\"\n    means this document.\n\n1.9. \"Licensable\"\n    means having the right to grant, to the maximum extent possible,\n    whether at the time of the initial grant or subsequently, any and\n    all of the rights conveyed by this License.\n\n1.10. \"Modifications\"\n    means any of the following:\n\n    (a) any file in Source Code Form that results from an addition to,\n        deletion from, or modification of the contents of Covered\n        Software; or\n\n    (b) any new file in Source Code Form that contains any Covered\n        Software.\n\n1.11. \"Patent Claims\" of a Contributor\n    means any patent claim(s), including without limitation, method,\n    process, and apparatus claims, in any patent Licensable by such\n    Contributor that would be infringed, but for the grant of the\n    License, by the making, using, selling, offering for sale, having\n    made, import, or transfer of either its Contributions or its\n    Contributor Version.\n\n1.12. \"Secondary License\"\n    means either the GNU General Public License, Version 2.0, the GNU\n    Lesser General Public License, Version 2.1, the GNU Affero General\n    Public License, Version 3.0, or any later versions of those\n    licenses.\n\n1.13. \"Source Code Form\"\n    means the form of the work preferred for making modifications.\n\n1.14. \"You\" (or \"Your\")\n    means an individual or a legal entity exercising rights under this\n    License. For legal entities, \"You\" includes any entity that\n    controls, is controlled by, or is under common control with You. For\n    purposes of this definition, \"control\" means (a) the power, direct\n    or indirect, to cause the direction or management of such entity,\n    whether by contract or otherwise, or (b) ownership of more than\n    fifty percent (50%) of the outstanding shares or beneficial\n    ownership of such entity.\n\n2. License Grants and Conditions\n--------------------------------\n\n2.1. Grants\n\nEach Contributor hereby grants You a world-wide, royalty-free,\nnon-exclusive license:\n\n(a) under intellectual property rights (other than patent or trademark)\n    Licensable by such Contributor to use, reproduce, make available,\n    modify, display, perform, distribute, and otherwise exploit its\n    Contributions, either on an unmodified basis, with Modifications, or\n    as part of a Larger Work; and\n\n(b) under Patent Claims of such Contributor to make, use, sell, offer\n    for sale, have made, import, and otherwise transfer either its\n    Contributions or its Contributor Version.\n\n2.2. Effective Date\n\nThe licenses granted in Section 2.1 with respect to any Contribution\nbecome effective for each Contribution on the date the Contributor first\ndistributes such Contribution.\n\n2.3. Limitations on Grant Scope\n\nThe licenses granted in this Section 2 are the only rights granted under\nthis License. No additional rights or licenses will be implied from the\ndistribution or licensing of Covered Software under this License.\nNotwithstanding Section 2.1(b) above, no patent license is granted by a\nContributor:\n\n(a) for any code that a Contributor has removed from Covered Software;\n    or\n\n(b) for infringements caused by: (i) Your and any other third party's\n    modifications of Covered Software, or (ii) the combination of its\n    Contributions with other software (except as part of its Contributor\n    Version); or\n\n(c) under Patent Claims infringed by Covered Software in the absence of\n    its Contributions.\n\nThis License does not grant any rights in the trademarks, service marks,\nor logos of any Contributor (except as may be necessary to comply with\nthe notice requirements in Section 3.4).\n\n2.4. Subsequent Licenses\n\nNo Contributor makes additional grants as a result of Your choice to\ndistribute the Covered Software under a subsequent version of this\nLicense (see Section 10.2) or under the terms of a Secondary License (if\npermitted under the terms of Section 3.3).\n\n2.5. Representation\n\nEach Contributor represents that the Contributor believes its\nContributions are its original creation(s) or it has sufficient rights\nto grant the rights to its Contributions conveyed by this License.\n\n2.6. Fair Use\n\nThis License is not intended to limit any rights You have under\napplicable copyright doctrines of fair use, fair dealing, or other\nequivalents.\n\n2.7. Conditions\n\nSections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted\nin Section 2.1.\n\n3. Responsibilities\n-------------------\n\n3.1. Distribution of Source Form\n\nAll distribution of Covered Software in Source Code Form, including any\nModifications that You create or to which You contribute, must be under\nthe terms of this License. You must inform recipients that the Source\nCode Form of the Covered Software is governed by the terms of this\nLicense, and how they can obtain a copy of this License. You may not\nattempt to alter or restrict the recipients' rights in the Source Code\nForm.\n\n3.2. Distribution of Executable Form\n\nIf You distribute Covered Software in Executable Form then:\n\n(a) such Covered Software must also be made available in Source Code\n    Form, as described in Section 3.1, and You must inform recipients of\n    the Executable Form how they can obtain a copy of such Source Code\n    Form by reasonable means in a timely manner, at a charge no more\n    than the cost of distribution to the recipient; and\n\n(b) You may distribute such Executable Form under the terms of this\n    License, or sublicense it under different terms, provided that the\n    license for the Executable Form does not attempt to limit or alter\n    the recipients' rights in the Source Code Form under this License.\n\n3.3. Distribution of a Larger Work\n\nYou may create and distribute a Larger Work under terms of Your choice,\nprovided that You also comply with the requirements of this License for\nthe Covered Software. If the Larger Work is a combination of Covered\nSoftware with a work governed by one or more Secondary Licenses, and the\nCovered Software is not Incompatible With Secondary Licenses, this\nLicense permits You to additionally distribute such Covered Software\nunder the terms of such Secondary License(s), so that the recipient of\nthe Larger Work may, at their option, further distribute the Covered\nSoftware under the terms of either this License or such Secondary\nLicense(s).\n\n3.4. Notices\n\nYou may not remove or alter the substance of any license notices\n(including copyright notices, patent notices, disclaimers of warranty,\nor limitations of liability) contained within the Source Code Form of\nthe Covered Software, except that You may alter any license notices to\nthe extent required to remedy known factual inaccuracies.\n\n3.5. Application of Additional Terms\n\nYou may choose to offer, and to charge a fee for, warranty, support,\nindemnity or liability obligations to one or more recipients of Covered\nSoftware. However, You may do so only on Your own behalf, and not on\nbehalf of any Contributor. You must make it absolutely clear that any\nsuch warranty, support, indemnity, or liability obligation is offered by\nYou alone, and You hereby agree to indemnify every Contributor for any\nliability incurred by such Contributor as a result of warranty, support,\nindemnity or liability terms You offer. You may include additional\ndisclaimers of warranty and limitations of liability specific to any\njurisdiction.\n\n4. Inability to Comply Due to Statute or Regulation\n---------------------------------------------------\n\nIf it is impossible for You to comply with any of the terms of this\nLicense with respect to some or all of the Covered Software due to\nstatute, judicial order, or regulation then You must: (a) comply with\nthe terms of this License to the maximum extent possible; and (b)\ndescribe the limitations and the code they affect. Such description must\nbe placed in a text file included with all distributions of the Covered\nSoftware under this License. Except to the extent prohibited by statute\nor regulation, such description must be sufficiently detailed for a\nrecipient of ordinary skill to be able to understand it.\n\n5. Termination\n--------------\n\n5.1. The rights granted under this License will terminate automatically\nif You fail to comply with any of its terms. However, if You become\ncompliant, then the rights granted under this License from a particular\nContributor are reinstated (a) provisionally, unless and until such\nContributor explicitly and finally terminates Your grants, and (b) on an\nongoing basis, if such Contributor fails to notify You of the\nnon-compliance by some reasonable means prior to 60 days after You have\ncome back into compliance. Moreover, Your grants from a particular\nContributor are reinstated on an ongoing basis if such Contributor\nnotifies You of the non-compliance by some reasonable means, this is the\nfirst time You have received notice of non-compliance with this License\nfrom such Contributor, and You become compliant prior to 30 days after\nYour receipt of the notice.\n\n5.2. If You initiate litigation against any entity by asserting a patent\ninfringement claim (excluding declaratory judgment actions,\ncounter-claims, and cross-claims) alleging that a Contributor Version\ndirectly or indirectly infringes any patent, then the rights granted to\nYou by any and all Contributors for the Covered Software under Section\n2.1 of this License shall terminate.\n\n5.3. In the event of termination under Sections 5.1 or 5.2 above, all\nend user license agreements (excluding distributors and resellers) which\nhave been validly granted by You or Your distributors under this License\nprior to termination shall survive termination.\n\n************************************************************************\n*                                                                      *\n*  6. Disclaimer of Warranty                                           *\n*  -------------------------                                           *\n*                                                                      *\n*  Covered Software is provided under this License on an \"as is\"       *\n*  basis, without warranty of any kind, either expressed, implied, or  *\n*  statutory, including, without limitation, warranties that the       *\n*  Covered Software is free of defects, merchantable, fit for a        *\n*  particular purpose or non-infringing. The entire risk as to the     *\n*  quality and performance of the Covered Software is with You.        *\n*  Should any Covered Software prove defective in any respect, You     *\n*  (not any Contributor) assume the cost of any necessary servicing,   *\n*  repair, or correction. This disclaimer of warranty constitutes an   *\n*  essential part of this License. No use of any Covered Software is   *\n*  authorized under this License except under this disclaimer.         *\n*                                                                      *\n************************************************************************\n\n************************************************************************\n*                                                                      *\n*  7. Limitation of Liability                                          *\n*  --------------------------                                          *\n*                                                                      *\n*  Under no circumstances and under no legal theory, whether tort      *\n*  (including negligence), contract, or otherwise, shall any           *\n*  Contributor, or anyone who distributes Covered Software as          *\n*  permitted above, be liable to You for any direct, indirect,         *\n*  special, incidental, or consequential damages of any character      *\n*  including, without limitation, damages for lost profits, loss of    *\n*  goodwill, work stoppage, computer failure or malfunction, or any    *\n*  and all other commercial damages or losses, even if such party      *\n*  shall have been informed of the possibility of such damages. This   *\n*  limitation of liability shall not apply to liability for death or   *\n*  personal injury resulting from such party's negligence to the       *\n*  extent applicable law prohibits such limitation. Some               *\n*  jurisdictions do not allow the exclusion or limitation of           *\n*  incidental or consequential damages, so this exclusion and          *\n*  limitation may not apply to You.                                    *\n*                                                                      *\n************************************************************************\n\n8. Litigation\n-------------\n\nAny litigation relating to this License may be brought only in the\ncourts of a jurisdiction where the defendant maintains its principal\nplace of business and such litigation shall be governed by laws of that\njurisdiction, without reference to its conflict-of-law provisions.\nNothing in this Section shall prevent a party's ability to bring\ncross-claims or counter-claims.\n\n9. Miscellaneous\n----------------\n\nThis License represents the complete agreement concerning the subject\nmatter hereof. If any provision of this License is held to be\nunenforceable, such provision shall be reformed only to the extent\nnecessary to make it enforceable. Any law or regulation which provides\nthat the language of a contract shall be construed against the drafter\nshall not be used to construe this License against a Contributor.\n\n10. Versions of the License\n---------------------------\n\n10.1. New Versions\n\nMozilla Foundation is the license steward. Except as provided in Section\n10.3, no one other than the license steward has the right to modify or\npublish new versions of this License. Each version will be given a\ndistinguishing version number.\n\n10.2. Effect of New Versions\n\nYou may distribute the Covered Software under the terms of the version\nof the License under which You originally received the Covered Software,\nor under the terms of any subsequent version published by the license\nsteward.\n\n10.3. Modified Versions\n\nIf you create software not governed by this License, and you want to\ncreate a new license for such software, you may create and use a\nmodified version of this License if you rename the license and remove\nany references to the name of the license steward (except to note that\nsuch modified license differs from this License).\n\n10.4. Distributing Source Code Form that is Incompatible With Secondary\nLicenses\n\nIf You choose to distribute Source Code Form that is Incompatible With\nSecondary Licenses under the terms of this version of the License, the\nnotice described in Exhibit B of this License must be attached.\n\nExhibit A - Source Code Form License Notice\n-------------------------------------------\n\n  This Source Code Form is subject to the terms of the Mozilla Public\n  License, v. 2.0. If a copy of the MPL was not distributed with this\n  file, You can obtain one at http://mozilla.org/MPL/2.0/.\n\nIf it is not possible or desirable to put the notice in a particular\nfile, then You may include the notice in a location (such as a LICENSE\nfile in a relevant directory) where a recipient would be likely to look\nfor such a notice.\n\nYou may add additional accurate notices of copyright ownership.\n\nExhibit B - \"Incompatible With Secondary Licenses\" Notice\n---------------------------------------------------------\n\n  This Source Code Form is \"Incompatible With Secondary Licenses\", as\n  defined by the Mozilla Public License, v. 2.0.\n"
  },
  {
    "path": "README.md",
    "content": "# waypoint-examples\n\n----------------------------------------\n\nHashiCorp Waypoint Community Edition is no longer actively maintained. For additional information on the new vision of Waypoint, check out [this blog post](https://www.hashicorp.com/blog/a-new-vision-for-hcp-waypoint) and the [HCP Waypoint documentation](https://developer.hashicorp.com/hcp/docs/waypoint).\n\n----------------------------------------\n\n\nYou can use these example applications to quickly try out and learn how to use\n[Waypoint](https://waypointproject.io/).\n\n## Getting Started\n\nIf you're new to Waypoint, start by reviewing the [Getting\nStarted](https://waypointproject.io/docs/getting-started) page, which includes\nguided tutorials and quickstart installation and deployment instructions.\n\nAll guided tutorials use applications in this repository.\n\nDetailed tutorials with instructions for provisioning each cloud resource are at\n[HashiCorp Learn](https://learn.hashicorp.com/waypoint).\n\n## How the Examples are Organized\n\nAll of the examples in this repository are organized first by deployment\nplatform and then by programming language or web platform. For example:\n**Docker/nodejs**.\n\nCloud-specific examples are in subdirectories for platform, such as **aws/aws-ecs**.\n\n## Deploying Examples\n\nYou can experiment with the different examples by entering each directory and\nrunning `waypoint init` followed by `waypoint up`.\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/README.md",
    "content": "# Waypoint AWS-ECS Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|AWS|\n|Language|NodeJS|\n|Docs|[AWS-ECS](https://www.waypointproject.io/plugins/aws-ecs)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/aws-ecs)|\n\nThis example demonstrates the AWS Elastic Container Service `deploy` plugin\nwhich also provides a `build` step for the Elastic Container Registry.\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/main.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nterraform {\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \"~> 2.70\"\n    }\n  }\n}\n\nprovider \"aws\" {\n  region = \"us-west-2\"\n}\n\nresource \"aws_instance\" \"web\" {\n  ami           = \"ami-04e229bcb91f0f16b\" # Nginx\n  instance_type = \"t2.medium\"\n  count         = 1\n\n  vpc_security_group_ids = [\"${aws_security_group.default.id}\"]\n\n  tags = {\n    Name = \"Geoffrey\"\n  }\n}\n\n\nresource \"aws_security_group\" \"default\" {\n  name_prefix = \"Geoffrey\"\n\n  ingress {\n    from_port = 80\n    to_port   = 80\n    protocol  = \"tcp\"\n\n  }\n\n  ingress {\n    from_port = 22\n    to_port   = 22\n    protocol  = \"tcp\"\n\n  }\n\n  egress {\n    from_port   = 0\n    to_port     = 0\n    protocol    = \"-1\"\n    cidr_blocks = [\"0.0.0.0/0\"]\n  }\n\n  tags = {\n    \"Created-by\" = \"Geoffrey\"\n\n  }\n}\n\noutput \"public_ip\" {\n  value = [\"${aws_instance.web.*.public_ip}\"]\n}\n\noutput \"public_dns\" {\n  value = [\"${aws_instance.web.*.public_dns}\"]\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"16.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^3.1.6\",\n    \"express\": \"^4.17.3\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/packer.json",
    "content": "{\n  \"variables\": {\n    \"aws_access_key\": \"\",\n    \"aws_secret_key\": \"\"\n  },\n  \"builders\": [\n    {\n      \"type\": \"amazon-ebs\",\n      \"access_key\": \"{{user `aws_access_key`}}\",\n      \"secret_key\": \"{{user `aws_secret_key`}}\",\n      \"region\": \"us-east-1\",\n      \"source_ami_filter\": {\n        \"filters\": {\n          \"virtualization-type\": \"hvm\",\n          \"name\": \"ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*\",\n          \"root-device-type\": \"ebs\"\n        },\n        \"owners\": [\"099720109477\"],\n        \"most_recent\": true\n      },\n      \"instance_type\": \"t2.micro\",\n      \"ssh_username\": \"ubuntu\",\n      \"ami_name\": \"packer-example {{timestamp}}\"\n    }\n  ]\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <%- include('../partials/header.ejs') %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "aws/aws-ecs/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"aws-ecs-nodejs\"\n\napp \"ecs-nodejs-web\" {\n  labels = {\n    \"service\" = \"ecs-nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"aws-ecr\" {\n        region     = \"us-east-1\"\n        repository = \"waypoint-example\"\n        tag        = \"latest\"\n      }\n    }\n  }\n\n  deploy {\n    use \"aws-ecs\" {\n      region = \"us-east-1\"\n      memory = \"512\"\n    }\n  }\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n\n\n# Local .terraform directories\n**/.terraform/*\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# Crash log files\ncrash.log\ncrash.*.log\n\n# Exclude all .tfvars files, which are likely to contain sensitive data, such as\n# password, private keys, and other secrets. These should not be part of version \n# control as they are data points which are potentially sensitive and subject \n# to change depending on the environment.\n*.tfvars\n*.tfvars.json\n\n# Ignore override files as they are usually used to override resources locally and so\n# are not checked in\noverride.tf\noverride.tf.json\n*_override.tf\n*_override.tf.json\n\n# Include override files you do wish to add to version control using negated pattern\n# !example_override.tf\n\n# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan\n# example: *tfplan*\n\n# Ignore CLI configuration files\n.terraformrc\nterraform.rc\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/README.md",
    "content": "# Waypoint AWS-ECS Example with a cluster sourced from TFC\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|AWS|\n|Language|NodeJS|\n|Docs|[AWS-ECS](https://www.waypointproject.io/plugins/aws-ecs)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/aws-ecs)|\n\nThis example demonstrates the AWS Elastic Container Service `deploy` plugin\nwhich also provides a `build` step for the Elastic Container Registry.\n\nIt uses a cluster created with terraform (see the ./terraform directory), and uses the ecs cluster name as an output value in the application.\n\n### Prerequisites\n\n- Create a terraform cloud account and run the terraform in the `./terraform` directory\n\n- Configure the [terraform-cloud configsourcer](https://www.waypointproject.io/plugins/terraform-cloud#source-parameters). Example:\n\n```\nwp config source-set -type=terraform-cloud -config=token=$TFC_TOKEN`\n```\n\n- Install a [remote runner](https://www.waypointproject.io/commands/runner-install), and configure your project with a [git url](https://www.waypointproject.io/commands/project-apply#git-url). Dynamic config is not allowed to be sourced on local operations.\n\n\n\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"16.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^3.1.6\",\n    \"express\": \"^4.17.3\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/packer.json",
    "content": "{\n  \"variables\": {\n    \"aws_access_key\": \"\",\n    \"aws_secret_key\": \"\"\n  },\n  \"builders\": [\n    {\n      \"type\": \"amazon-ebs\",\n      \"access_key\": \"{{user `aws_access_key`}}\",\n      \"secret_key\": \"{{user `aws_secret_key`}}\",\n      \"region\": \"us-east-1\",\n      \"source_ami_filter\": {\n        \"filters\": {\n          \"virtualization-type\": \"hvm\",\n          \"name\": \"ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*\",\n          \"root-device-type\": \"ebs\"\n        },\n        \"owners\": [\"099720109477\"],\n        \"most_recent\": true\n      },\n      \"instance_type\": \"t2.micro\",\n      \"ssh_username\": \"ubuntu\",\n      \"ami_name\": \"packer-example {{timestamp}}\"\n    }\n  ]\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/.terraform.lock.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# This file is maintained automatically by \"terraform init\".\n# Manual edits may be lost in future updates.\n\nprovider \"registry.terraform.io/hashicorp/aws\" {\n  version = \"4.29.0\"\n  hashes = [\n    \"h1:u0G5dgyBJZgrXicmD/nxSJebNORcQqFkN1jU2emJBUI=\",\n    \"zh:091615c6dddd556b8cc1cd54e1c5c1fe71b593acebacd0b274a2fed7fc4ca802\",\n    \"zh:4cc11d7252813b2d7cb52e78b24af8eaf377cc242d1d672a7f8bf680758a4976\",\n    \"zh:565f46308d6e96a21c273e84e0f73d3f39fd8159fc5aaf41bf65c0b0dd6f1de3\",\n    \"zh:627b6a5574262b5f07c0e012bcb5c73afd97d90b75389c0ab154b5ae4c0dce8f\",\n    \"zh:91622572d311c28504fbf14e9364120fbafb3adf8e2d49bfdf014752dac9dac0\",\n    \"zh:98f37f07628b7c2960335b772a544de6bb90f0f390b9d5fdcc3ac211b9cd7def\",\n    \"zh:9a6338478ba0e7ca75c5b43e0f91dde12d17273b1dc9934c8ff4d631b8bb837a\",\n    \"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425\",\n    \"zh:a1cc1fc49e406cba1e98250bc04a47be0b6babf5bb42f23baa40f2dc7f8b90f7\",\n    \"zh:a251e933412036426e2f7b090000c198feee114270d5724bcc8dd9d674d43689\",\n    \"zh:b0ef3b92947cc8cea75634139dfbfcae2207a9cb5c31d827cd34e523ca04e919\",\n    \"zh:fb9ede02c9291e7677877bc21ec5c094da38e3cd44df91da5af36f504be399be\",\n  ]\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/backend.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Using a single workspace:\nterraform {\n  backend \"remote\" {\n    hostname     = \"app.terraform.io\"\n    organization = \"hc-waypoint\"\n\n    workspaces {\n      name = \"hashiconf-demo\"\n    }\n  }\n}\n\nprovider \"aws\" {\n  region = var.region\n  # default_tags {\n  #   tags = local.tags\n  # }\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/ecs.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nresource \"aws_kms_key\" \"ecs\" {\n  description             = \"${var.name}-ecs\"\n  deletion_window_in_days = 7\n}\n\nresource \"aws_cloudwatch_log_group\" \"ecs\" {\n  name = var.name\n}\n\nresource \"aws_ecs_cluster\" \"cluster\" {\n  name = var.name\n\n  configuration {\n    execute_command_configuration {\n      kms_key_id = aws_kms_key.ecs.arn\n      logging    = \"OVERRIDE\"\n\n      log_configuration {\n        cloud_watch_encryption_enabled = true\n        cloud_watch_log_group_name     = aws_cloudwatch_log_group.ecs.name\n      }\n    }\n  }\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/main.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\ndata \"aws_vpc\" \"selected\" {\n  default = true\n}\n\noutput \"test\" {\n  value = data.aws_vpc.selected.id\n}\n\n\nterraform {\n  required_providers {\n    aws = {\n      source  = \"hashicorp/aws\"\n      version = \"~> 4.29\"\n    }\n  }\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/outputs.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\noutput \"ecs_cluster_name\" {\n  value       = aws_ecs_cluster.cluster.name\n  description = \"ecs cluster name\"\n}"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/terraform/variables.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n\nvariable \"name\" {\n  type        = string\n  description = \"Name for infrastructure resources\"\n  default     = \"tfcwaypoint\"\n}\n\n# variable \"tags\" {\n#   type        = map(string)\n#   description = \"Tags to add to infrastructure resources\"\n#   default     = {}\n# }\n\nvariable \"region\" {\n  type        = string\n  description = \"AWS Region\"\n  default     = \"us-west-2\"\n  validation {\n    condition     = contains([\"us-west-2\", \"us-west-2\"], var.region)\n    error_message = \"Region must be a valid one for HCP.\"\n  }\n}\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <%- include('../partials/header.ejs') %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "aws/aws-ecs/nodejs-terraform/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"njs-ecs-tfc-demo\"\n\napp \"njs-ecs-tfc-demo\" {\n  build {\n    use \"pack\" {}\n    registry {\n      use \"aws-ecr\" {\n        region     = \"us-west-2\"\n        repository = \"njs-ecs-tfc\"\n        tag        = \"latest\"\n      }\n    }\n  }\n\n  deploy {\n    use \"aws-ecs\" {\n      region  = \"us-west-2\"\n      memory  = \"512\"\n      cluster = var.ecs_cluster\n    }\n  }\n}\n\nvariable \"ecs_cluster\" {\n  default = dynamic(\"terraform-cloud\", {\n    organization = \"hc-waypoint\"\n    workspace    = \"hashiconf-demo\"\n    output       = \"ecs_cluster_name\"\n  })\n  type    = string\n  sensitive   = false\n  description = \"name of the ecs cluster to deploy into\"\n}\n"
  },
  {
    "path": "aws/aws-ecs/python/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM ubuntu:20.04\n\nENV LC_ALL=C.UTF-8\nENV LANG=C.UTF-8\n\nRUN apt-get update -y && apt-get install python3-pip -y\n\nADD requirements.txt /app/\nWORKDIR /app\nRUN /bin/bash -c \"pip3 install --no-cache-dir -r requirements.txt\"\n\nADD /app/ /app/\n\nEXPOSE 3000\n\nCMD [\"gunicorn\", \"-b\", \"0.0.0.0:3000\", \"wsgi\", \"-k\", \"gevent\"]\n"
  },
  {
    "path": "aws/aws-ecs/python/README.md",
    "content": "# Getting Started with Waypoint and Flask\n\nThis is a slightly-modified version of the docker/python example, with changes\nto publish to AWS ECR and deploy to AWS ECS, instead of a local Docker setup.\n\n1. Run `waypoint init` in this example directory with `waypoint.hcl`.\n1. Run `waypoint up` to build and deploy the application.\n\nFor more information on Flask, see [https://palletsprojects.com/p/flask/](https://palletsprojects.com/p/flask/).\n"
  },
  {
    "path": "aws/aws-ecs/python/app/app.py",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nfrom flask import Flask, render_template\napplication = Flask(__name__)\n\n@application.route(\"/\")\ndef index():\n    return (render_template('index.html'))\n\nif __name__ == \"__main__\":\n    application.run(host='0.0.0.0')\n"
  },
  {
    "path": "aws/aws-ecs/python/app/static/images/language.svg.old",
    "content": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"50\" height=\"56\" viewBox=\"0 0 50 56\">\n  <path fill=\"#04C6C2\" fill-rule=\"evenodd\" d=\"M42.1698094,12.5509308 L62.8294149,24.409428 C64.1673476,25.1779059 65,26.6105829 65,28.1495934 L65,51.8321707 C65,53.3706675 64.1673476,54.8023171 62.8294149,55.5759319 L42.1698094,67.4241553 C41.5093764,67.803771 40.7599892,68 39.9945697,68 C39.2400108,68 38.4880377,67.803771 37.8281219,67.4241553 L30.9295193,63.3701263 C30.1684395,62.9471597 30.2448084,62.7259697 30.4734419,62.5918498 L30.5593427,62.547942 L30.5593427,62.547942 L30.7423018,62.4773358 L30.7423018,62.4773358 L31.4149203,62.242212 L31.4149203,62.242212 L31.779433,62.1070337 L31.779433,62.1070337 L32.1080787,61.9743355 L32.1080787,61.9743355 L32.4276456,61.8314519 C32.4816385,61.8060855 32.5363691,61.779767 32.5923958,61.7522325 L32.9485721,61.5703226 L32.9485721,61.5703226 L33.3626397,61.3465631 L33.3626397,61.3465631 L33.8613867,61.0682885 L33.8613867,61.0682885 C34.0139534,60.9830162 34.2166861,61.0148649 34.3744246,61.1073288 L39.6739209,64.2326091 C39.865793,64.3379153 40.1367929,64.3379153 40.3136669,64.2326091 L60.9748239,52.3874678 C61.166696,52.2785659 61.2908181,52.0587072 61.2908181,51.8321707 L61.2908181,28.1495934 C61.2908181,27.9179199 61.166696,27.7011434 60.9696521,27.5835088 L40.3172871,15.7491549 C40.1264494,15.6381982 39.8730334,15.6381982 39.6806442,15.7491549 L19.0334509,27.5871046 C18.8327869,27.7011434 18.7055617,27.9240842 18.7055617,28.1495934 L18.7055617,51.8321707 C18.7055617,52.0587072 18.8327869,52.273429 19.0313822,52.3807899 L24.6913497,55.6288418 C27.7623372,57.1539827 29.6422698,55.358128 29.6422698,53.5530269 L29.6422698,30.16993 C29.6422698,29.840142 29.9101666,29.5791883 30.2432276,29.5791883 L32.862721,29.5791883 C33.1906102,29.5791883 33.4616101,29.840142 33.4616101,30.16993 L33.4616101,53.5530269 C33.4616101,57.6240076 31.2294811,59.9587215 27.3439423,59.9587215 L26.9664669,59.9571413 L26.9664669,59.9571413 L26.592177,59.9460801 L26.592177,59.9460801 L26.3373562,59.9287568 C26.2511213,59.9212656 26.1633564,59.9119017 26.0733551,59.9001967 L25.7959353,59.8575907 C25.2724419,59.7648876 24.6599273,59.5872065 23.8408635,59.2466512 L23.3729108,59.0442727 C23.1279859,58.9345388 22.8661085,58.8116369 22.5848943,58.6739867 L17.1669649,55.5759319 C15.828515,54.807454 15,53.3706675 15,51.8321707 L15,28.1495934 C15,26.6105829 15.828515,25.1743101 17.1669649,24.409428 L37.8281219,12.5509308 C39.1350242,11.8163564 40.8732507,11.8163564 42.1698094,12.5509308 Z M45.5479473,28.948533 C52.166758,28.948533 55.4420298,31.230337 55.8573217,36.1257876 C55.8723197,36.2947911 55.8123274,36.456603 55.699066,36.5829703 C55.5863217,36.7000913 55.4285832,36.7720077 55.2620528,36.7720077 L52.5804984,36.7720077 C52.302258,36.7720077 52.0565997,36.5757787 52.0002276,36.308147 C51.3879904,33.6012536 49.9393598,32.6485888 46.1362605,32.5639969 L45.5479473,32.5577078 L45.5479473,32.5577078 C42.1100954,32.5577078 40.8701514,33.4184701 40.4472384,34.3607707 L40.380807,34.5277469 C40.3613029,34.583582 40.3443448,34.6395406 40.3296517,34.6954642 L40.2920862,34.8629712 C40.2868641,34.8908186 40.282138,34.9186176 40.2778726,34.9463483 L40.2575299,35.1117554 C40.2549674,35.1391338 40.2527955,35.1664044 40.250979,35.1935473 L40.2432793,35.4338493 L40.2432793,35.4338493 L40.2439568,35.514233 L40.2439568,35.514233 L40.2499299,35.6689153 L40.2499299,35.6689153 L40.2632894,35.8158371 L40.2632894,35.8158371 L40.2855105,35.9554218 C40.2900344,35.978098 40.2949889,36.0004861 40.3004049,36.022595 L40.3386836,36.151968 C40.3903753,36.2991583 40.4676874,36.4335298 40.5811593,36.5581083 L40.6875223,36.6625621 C40.7068073,36.6795949 40.7268917,36.6964454 40.7478062,36.7131226 L40.8835011,36.8111754 L40.8835011,36.8111754 L41.0405941,36.90549 C41.0966887,36.9363523 41.1565955,36.9666621 41.2205604,36.9964901 L41.4248746,37.0845988 L41.4248746,37.0845988 L41.6550119,37.1702397 C41.695602,37.184331 41.7373295,37.1983372 41.7802251,37.212267 L42.0518623,37.295 L42.0518623,37.295 L42.3530099,37.3763237 L42.3530099,37.3763237 L42.6851426,37.4566614 L42.6851426,37.4566614 L43.0497354,37.5364367 L43.0497354,37.5364367 L43.4482633,37.6160729 L43.4482633,37.6160729 L44.1129097,37.7361926 L44.1129097,37.7361926 L44.8622064,37.858381 L44.8622064,37.858381 L45.7011311,37.9840672 L45.7011311,37.9840672 L47.991481,38.2976124 L47.991481,38.2976124 L48.6445718,38.3936231 L48.6445718,38.3936231 L49.2713969,38.4940683 L49.2713969,38.4940683 L49.8720479,38.5997856 C50.0679128,38.6359964 50.2594306,38.6732255 50.4466167,38.7116125 L50.9951951,38.8303868 C54.8337599,39.7084979 56.6770447,41.1863751 56.6770447,44.6514743 C56.6770447,49.123132 52.9233856,51.6838688 46.3764623,51.6838688 C38.6652403,51.6838688 36.1530348,48.6851975 35.5809161,45.6576954 L35.5285184,45.3445245 C35.5056463,45.1880094 35.4876639,45.0316911 35.4741205,44.8759806 L35.4528184,44.5654919 L35.4528184,44.5654919 L35.4425515,44.2573547 C35.4417155,44.206235 35.4413058,44.1552438 35.4413058,44.1043962 C35.4413058,43.7751219 35.7076511,43.5131408 36.0386433,43.5131408 L38.7098543,43.5131408 C39.0082645,43.5131408 39.2570258,43.7263215 39.3035716,44.0155281 L39.3571356,44.3395724 C39.3668075,44.3924649 39.3768713,44.4447999 39.3873565,44.4965772 L39.4555599,44.8005455 C39.9839672,46.9309915 41.4004376,48.0293047 46.0470124,48.0781276 L46.3764623,48.0798308 C50.7295276,48.0798308 52.5820499,47.1017681 52.5820499,44.8081493 L52.5768503,44.6022034 L52.5768503,44.6022034 L52.5660641,44.4680437 L52.5660641,44.4680437 L52.5476944,44.3363892 C52.5401428,44.2929215 52.5310804,44.2498705 52.5202605,44.2072356 L52.4822815,44.0805786 L52.4822815,44.0805786 L52.4322766,43.956414 C52.356928,43.7925208 52.2455615,43.6352626 52.0823819,43.4845938 L51.9500354,43.3728271 C51.9262763,43.354405 51.9016458,43.3360856 51.8761132,43.317869 L51.7118453,43.2098009 C51.6825808,43.1919947 51.6523525,43.174291 51.6211295,43.1566897 L51.4216084,43.0523106 C51.3509581,43.0179268 51.2760822,42.983952 51.1967341,42.9503854 L50.9450258,42.8509101 L50.9450258,42.8509101 L50.6650028,42.7538802 L50.6650028,42.7538802 L50.3551842,42.6592915 C50.3009825,42.64373 50.2454777,42.6282699 50.1886388,42.6129113 L49.8313502,42.5219766 L49.8313502,42.5219766 L49.4405641,42.4334724 L49.4405641,42.4334724 L49.0147996,42.3473945 L49.0147996,42.3473945 L48.5525758,42.2637386 L48.5525758,42.2637386 L48.052412,42.1825006 L48.052412,42.1825006 L47.5128273,42.1036761 L47.5128273,42.1036761 L46.626297,41.9899555 L46.626297,41.9899555 L45.6427402,41.8816413 L45.6427402,41.8816413 L44.980649,41.8151639 L44.980649,41.8151639 L44.3705353,41.7473964 C44.2703682,41.7355554 44.1709661,41.7234304 44.0723374,41.7110051 L43.4899149,41.6327184 L43.4899149,41.6327184 L42.926464,41.5464416 C42.8341592,41.5313528 42.7426619,41.5158985 42.6519806,41.5000625 L42.1177533,41.400334 L42.1177533,41.400334 L41.6035192,41.2906603 C38.1588271,40.5054625 36.1431128,38.9689103 36.1431128,35.5581619 C36.1431128,31.4178332 39.6568024,28.948533 45.5479473,28.948533 Z\" transform=\"translate(-15 -12)\"/>\n</svg>\n"
  },
  {
    "path": "aws/aws-ecs/python/app/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "aws/aws-ecs/python/app/templates/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n  <head>\n<title>Waypoint Flask Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Flask Icon\" />\n        </div>\n        <h1>This Flask app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n\n"
  },
  {
    "path": "aws/aws-ecs/python/app/wsgi.py",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nfrom app import application\n\nif __name__ == \"__main__\":\n    application.run()\n"
  },
  {
    "path": "aws/aws-ecs/python/requirements.txt",
    "content": "gevent\ngunicorn\nflask\n"
  },
  {
    "path": "aws/aws-ecs/python/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"aws-ecs-python\"\n\napp \"ecs-python\" {\n  labels = {\n    \"service\" = \"ecs-python\",\n    \"env\" = \"dev\"\n  }\n\n  build {\n    use \"docker\" {}\n    registry {\n      use \"aws-ecr\" {\n        region = \"us-east-1\"\n        repository = \"waypoint-example\"\n        tag = \"latest\"\n      }\n    }\n  }\n\n  deploy { \n    use \"aws-ecs\" {\n      region = \"us-east-1\"\n      memory = \"512\"\n    }\n  }\n}\n"
  },
  {
    "path": "aws/ec2/README.md",
    "content": "# Waypoint AWS-EC2 Example\n\n|Title|Description|\n|---|---|\n|Pack|N/A|\n|Cloud|AWS|\n|Language|N/A|\n|Docs|[AWS-EC2](https://www.waypointproject.io/plugins/aws-ec2)|\n|Tutorial|N/A|\n\nThis example demonstrates the AWS EC2 `deploy` plugin. This uses a public AMI\nfor [NGINX][nginx] in `us-west` region as a simple example.\n\n\n[nginx]:https://bitnami.com/stack/nginx/cloud/aws/amis\n"
  },
  {
    "path": "aws/ec2/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"aws-ec2-nginx-ami\"\n\napp \"ec2-nginx\" {\n  labels = {\n    \"service\" = \"ec2-nginx\"\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"aws-ami\" {\n      filters = {\n        // See https://bitnami.com/stack/nginx/cloud/aws/amis\n        \"image-id\" = [\"ami-0562fde33e9671bf4\"]\n      }\n\n      region = \"us-west-2\"\n    }\n  }\n\n  deploy {\n    use \"aws-ec2\" {\n      region        = \"us-west-2\"\n      instance_type = \"t3a.nano\"\n      service_port  = 80\n    }\n  }\n\n  release {\n    use \"aws-alb\" {\n      port = 80\n    }\n  }\n}\n"
  },
  {
    "path": "aws/lambda/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"aws-lambda-nodejs\"\n\napp \"lambda-nodejs-function\" {\n  build {\n   use \"aws-ecr-pull\" {\n     region     = var.region\n     repository = \"lambda-nodejs\"\n     tag        = var.tag\n   }\n  }\n\n  deploy {\n    use \"aws-lambda\" {\n      region = var.region\n      memory = 512\n    }\n  }\n\n  release {\n    use \"lambda-function-url\" {\n\n    }\n  }\n}\n\nvariable \"region\" {\n  type = string\n  default = \"us-east-1\"\n}\n\nvariable \"tag\" {\n  type = string\n  default = \"1\"\n}\n"
  },
  {
    "path": "aws/lambda/nodejs-graphql/.gitignore",
    "content": "node_modules\n"
  },
  {
    "path": "aws/lambda/nodejs-graphql/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n###########\n# Builder #\n###########\nFROM public.ecr.aws/lambda/nodejs:14 as BUILDER\n\nWORKDIR /var/task\nCOPY index.js package*.json ./\n\nRUN npm install npm@latest -g\nRUN npm install\nRUN npm prune --production\n\n###########\n# Runtime #\n###########\nFROM public.ecr.aws/lambda/nodejs:14\n\nWORKDIR /var/task\nCOPY --from=BUILDER /var/task ./\n\nCMD [ \"index.handler\" ]"
  },
  {
    "path": "aws/lambda/nodejs-graphql/README.md",
    "content": "# Waypoint Node.js GraphQL Example\n\n|Title|Description|\n|---|---|\n|Pack|Docker|\n|Cloud|AWS|\n|Language|NodeJS|\n|Docs|[AWS Lambda](https://www.waypointproject.io/plugins/aws-lambda)|\n|Tutorial| N/A |\n\nThis example demonstrates the AWS Lambda `deploy` plugin.\n\nIt uses [`apollo-server-lambda`][apollo-server-lambda] to handle the mapping of various AWS event objects (API Gateway, ALB, Lambda@Edge) to lambda.\n\nTo deploy, run `waypoint up`. It will take a few minutes for a brand new load balancer to be fully provisioned.\n\nTo destroy, run `waypoint destroy -auto-approve`\n\n[apollo-server-lambda]: https://github.com/apollographql/apollo-server/tree/main/packages/apollo-server-lambda"
  },
  {
    "path": "aws/lambda/nodejs-graphql/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst { ApolloServer, gql } = require(\"apollo-server-lambda\");\nconst {\n  ApolloServerPluginLandingPageGraphQLPlayground,\n} = require(\"apollo-server-core\");\n\nconst typeDefs = gql`\n  type Echo {\n    message: String!\n    echo(message: String): Echo!\n  }\n\n  type Query {\n    echo(message: String!): Echo!\n  }\n`;\n\nconst resolvers = {\n  Echo: {\n    echo: (parent, args, { dataSources }, info) => {\n      const parentMessage = parent.message;\n      const { message } = args;\n\n      if (message) {\n        return { message };\n      } else {\n        return { message: parentMessage };\n      }\n    },\n  },\n  Query: {\n    echo: (parent, args, context, info) => {\n      const { message } = args;\n      return { message };\n    },\n  },\n};\n\nconst server = new ApolloServer({\n  typeDefs: typeDefs,\n  resolvers: resolvers,\n  introspection: true,\n  plugins: [ApolloServerPluginLandingPageGraphQLPlayground],\n});\n\nexports.handler = server.createHandler();"
  },
  {
    "path": "aws/lambda/nodejs-graphql/package.json",
    "content": "{\n  \"name\": \"waypoint-apollo-lambda\",\n  \"version\": \"0.1.0\",\n  \"description\": \"An Apollo GraphQL server intended to run on AWS Lambda\",\n  \"main\": \"index.js\",\n  \"dependencies\": {\n    \"apollo-server-core\": \"^3.6.3\",\n    \"apollo-server-lambda\": \"^3.6.3\"\n  },\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"graphql\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "aws/lambda/nodejs-graphql/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"waypoint-apollo-lambda\"\n\napp \"waypoint-apollo-lambda-function\" {\n  build {\n    use \"docker\" {\n      buildkit = true\n      platform = \"amd64\"\n    }\n\n    registry {\n      use \"aws-ecr\" {\n        region     = var.region\n        repository = var.aws_ecr_repository\n        tag        = gitrefpretty()\n      }\n    }\n  }\n\n  deploy {\n    use \"aws-lambda\" {\n      region = var.region\n      memory = 256\n    }\n  }\n\n  release {\n    use \"aws-alb\" {}\n  }\n}\n\nvariable \"aws_ecr_repository\" {\n  default     = \"waypoint-apollo-lambda\"\n  type        = string\n  description = \"AWS ECR repository name\"\n}\n\nvariable \"region\" {\n  default     = \"us-east-1\"\n  type        = string\n  description = \"AWS region\"\n}"
  },
  {
    "path": "aws/lambda/ruby/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM public.ecr.aws/lambda/ruby:2.7\n\nCOPY handler.rb /var/task\n\nCMD [ \"handler.handler\" ]"
  },
  {
    "path": "aws/lambda/ruby/README.md",
    "content": "# Getting Started with Waypoint and Lambda\n\nThis repo is a companion repo to the [Deploy Waypoint to AWS Lambda Learn tutorial](https://learn.hashicorp.com/tutorials/waypoint/aws-lambda?in=waypoint/deploy-aws)."
  },
  {
    "path": "aws/lambda/ruby/handler.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'json'\n\ndef handler(event:, context:)\n    qs = event.fetch(\"queryStringParameters\", {})\n\n    name = qs.fetch(\"name\", \"unknown user\")\n   \n    STDERR.puts \"Handling ALB request for #{name}\"\n\n    {\n        \"statusCode\": 200,\n        \"statusDescription\": \"200 OK\",\n        \"isBase64Encoded\": false,\n        \"headers\": {\n            \"Content-Type\": \"text/html\"\n        },\n        \"body\": \"<html><body><h1>Howdy #{name} from Lambda!</h1></html></body>\"\n    }\nend"
  },
  {
    "path": "aws/lambda/ruby/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"learn-waypoint-lambda\"\n\napp \"learn-waypoint-lambda-function\" {\n  build {\n    use \"docker\" {}\n\n    registry {\n      use \"aws-ecr\" {\n        region = \"us-west-2\"\n        repository = \"learn-waypoint-lambda\"\n        tag = \"howdy-waypoint-lambda\"\n      }\n    }\n  }\n\n  deploy { \n    use \"aws-lambda\" {\n      region = \"us-west-2\"\n    }\n  }\n\n  release {\n    use \"aws-alb\" {\n    }\n  }\n}"
  },
  {
    "path": "azure/azure-container-instance/nodejs/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/README.md",
    "content": "# Waypoint ACI Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Azure|\n|Language|NodeJS|\n|Docs|[Azure ACI](https://www.waypointproject.io/plugins/azure-container-instances)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/azure-container-instance?in=waypoint/deploy-azure)|\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "azure/azure-container-instance/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "azure/azure-container-instance/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"azure-container-nodejs\"\n\napp \"container-nodejs-web\" {\n  labels = {\n    \"service\" = \"nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n\n    registry {\n      use \"docker\" {\n        image = \"<my-container-registry>.azurecr.io/example-nodejs\"\n        tag   = \"latest\"\n      }\n    }\n  }\n\n  deploy {\n    use \"azure-container-instance\" {\n      resource_group = \"DefaultResourceGroup-EUS\"\n      location       = \"eastus\"\n      ports          = [8080]\n\n      capacity {\n        memory    = \"512\"\n        cpu_count = 1\n      }\n\n    }\n  }\n\n}\n"
  },
  {
    "path": "docker/angular/Procfile",
    "content": "web: node server.js\n"
  },
  {
    "path": "docker/angular/README.md",
    "content": "# Angular Waypoint Demo Application\n\n![Angular Waypoint](angular-waypoint.png)\n\nThis application deploys an Angular based application, built in Waypoint using the\n[pack builder](https://www.waypointproject.io/docs/lifecycle/build#cloud-native-buildpacks)\n, with a [Procfile](https://www.waypointproject.io/docs/lifecycle/build#customizing-the-buildpack-launch-command)\nto control the hosting server process.\n\nDuring Waypoint's `build` phase the Buildpack detects the language type and generates the\nstatic files using the `build` command located in the `package.json` file. In this case,\nthe Buildpack also detects the presence of the Procfile, and uses the command contained\nwithin to launch the server process. In the case of this deployment, it uses NodeJS (the\n`node` command) to launch an ExpressJS server to host the static files.\n\n## Customization of the Angular Application\n\nTo change aspects of the application, you can edit the `src/app/app.component.html`\ncomponent file. SCSS files can be customized by either applying them to the component's\nSCSS file at `src/app/app.component.scss` or at the global SCSS file (`styles.scss`) in\nthe root directory.\n\n## Deploying the Application\n\nTo deploy this application, initialize against against a Waypoint server by issuing a\n`waypoint init` command. Once registered against a server, and execute the `waypoint up`\ncommand.\n"
  },
  {
    "path": "docker/angular/angular.json",
    "content": "{\n  \"$schema\": \"./node_modules/@angular/cli/lib/config/schema.json\",\n  \"version\": 1,\n  \"newProjectRoot\": \"projects\",\n  \"projects\": {\n    \"angular\": {\n      \"projectType\": \"application\",\n      \"schematics\": {\n        \"@schematics/angular:component\": {\n          \"style\": \"scss\"\n        }\n      },\n      \"root\": \"\",\n      \"sourceRoot\": \"src\",\n      \"prefix\": \"app\",\n      \"architect\": {\n        \"build\": {\n          \"builder\": \"@angular-devkit/build-angular:browser\",\n          \"options\": {\n            \"outputPath\": \"dist/angular\",\n            \"index\": \"src/index.html\",\n            \"main\": \"src/main.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.app.json\",\n            \"aot\": false,\n            \"assets\": [\"src/favicon.ico\", \"src/assets\"],\n            \"styles\": [\"src/styles.scss\"],\n            \"scripts\": []\n          },\n          \"configurations\": {\n            \"production\": {\n              \"fileReplacements\": [\n                {\n                  \"replace\": \"src/environments/environment.ts\",\n                  \"with\": \"src/environments/environment.prod.ts\"\n                }\n              ],\n              \"optimization\": true,\n              \"outputHashing\": \"all\",\n              \"sourceMap\": false,\n              \"extractCss\": true,\n              \"namedChunks\": false,\n              \"aot\": true,\n              \"extractLicenses\": true,\n              \"vendorChunk\": false,\n              \"buildOptimizer\": true,\n              \"budgets\": [\n                {\n                  \"type\": \"initial\",\n                  \"maximumWarning\": \"2mb\",\n                  \"maximumError\": \"5mb\"\n                },\n                {\n                  \"type\": \"anyComponentStyle\",\n                  \"maximumWarning\": \"6kb\",\n                  \"maximumError\": \"10kb\"\n                }\n              ]\n            }\n          }\n        },\n        \"serve\": {\n          \"builder\": \"@angular-devkit/build-angular:dev-server\",\n          \"options\": {\n            \"browserTarget\": \"angular:build\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"browserTarget\": \"angular:build:production\"\n            }\n          }\n        },\n        \"extract-i18n\": {\n          \"builder\": \"@angular-devkit/build-angular:extract-i18n\",\n          \"options\": {\n            \"browserTarget\": \"angular:build\"\n          }\n        },\n        \"test\": {\n          \"builder\": \"@angular-devkit/build-angular:karma\",\n          \"options\": {\n            \"main\": \"src/test.ts\",\n            \"polyfills\": \"src/polyfills.ts\",\n            \"tsConfig\": \"tsconfig.spec.json\",\n            \"karmaConfig\": \"karma.conf.js\",\n            \"assets\": [\"src/favicon.ico\", \"src/assets\"],\n            \"styles\": [\"src/styles.scss\"],\n            \"scripts\": []\n          }\n        },\n        \"lint\": {\n          \"builder\": \"@angular-devkit/build-angular:tslint\",\n          \"options\": {\n            \"tsConfig\": [\n              \"tsconfig.app.json\",\n              \"tsconfig.spec.json\",\n              \"e2e/tsconfig.json\"\n            ],\n            \"exclude\": [\"**/node_modules/**\"]\n          }\n        },\n        \"e2e\": {\n          \"builder\": \"@angular-devkit/build-angular:protractor\",\n          \"options\": {\n            \"protractorConfig\": \"e2e/protractor.conf.js\",\n            \"devServerTarget\": \"angular:serve\"\n          },\n          \"configurations\": {\n            \"production\": {\n              \"devServerTarget\": \"angular:serve:production\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"defaultProject\": \"angular\"\n}\n"
  },
  {
    "path": "docker/angular/browserslist",
    "content": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For additional information regarding the format and rule options, please see:\n# https://github.com/browserslist/browserslist#queries\n\n# You can see what browsers were selected by your queries by running:\n#   npx browserslist\n\n> 0.5%\nlast 2 versions\nFirefox ESR\nnot dead\nnot IE 9-11 # For IE 9-11 support, remove 'not'."
  },
  {
    "path": "docker/angular/e2e/protractor.conf.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// @ts-check\n// Protractor configuration file, see link for more information\n// https://github.com/angular/protractor/blob/master/lib/config.ts\n\nconst { SpecReporter } = require('jasmine-spec-reporter');\n\n/**\n * @type { import(\"protractor\").Config }\n */\nexports.config = {\n  allScriptsTimeout: 11000,\n  specs: [\n    './src/**/*.e2e-spec.ts'\n  ],\n  capabilities: {\n    browserName: 'chrome'\n  },\n  directConnect: true,\n  baseUrl: 'http://localhost:4200/',\n  framework: 'jasmine',\n  jasmineNodeOpts: {\n    showColors: true,\n    defaultTimeoutInterval: 30000,\n    print: function() {}\n  },\n  onPrepare() {\n    require('ts-node').register({\n      project: require('path').join(__dirname, './tsconfig.json')\n    });\n    jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));\n  }\n};"
  },
  {
    "path": "docker/angular/e2e/src/app.e2e-spec.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { AppPage } from './app.po';\nimport { browser, logging } from 'protractor';\n\ndescribe('workspace-project App', () => {\n  let page: AppPage;\n\n  beforeEach(() => {\n    page = new AppPage();\n  });\n\n  it('should display welcome message', () => {\n    page.navigateTo();\n    expect(page.getTitleText()).toEqual('angulardemo app is running!');\n  });\n\n  afterEach(async () => {\n    // Assert that there are no errors emitted from the browser\n    const logs = await browser.manage().logs().get(logging.Type.BROWSER);\n    expect(logs).not.toContain(jasmine.objectContaining({\n      level: logging.Level.SEVERE,\n    } as logging.Entry));\n  });\n});\n"
  },
  {
    "path": "docker/angular/e2e/src/app.po.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { browser, by, element } from 'protractor';\n\nexport class AppPage {\n  navigateTo() {\n    return browser.get(browser.baseUrl) as Promise<any>;\n  }\n\n  getTitleText() {\n    return element(by.css('app-root .content span')).getText() as Promise<string>;\n  }\n}\n"
  },
  {
    "path": "docker/angular/e2e/tsconfig.json",
    "content": "{\n  \"extends\": \"../tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"../out-tsc/e2e\",\n    \"module\": \"commonjs\",\n    \"target\": \"es5\",\n    \"types\": [\"jasmine\", \"jasminewd2\", \"node\"]\n  }\n}\n"
  },
  {
    "path": "docker/angular/karma.conf.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Karma configuration file, see link for more information\n// https://karma-runner.github.io/1.0/config/configuration-file.html\n\nmodule.exports = function (config) {\n  config.set({\n    basePath: \"\",\n    frameworks: [\"jasmine\", \"@angular-devkit/build-angular\"],\n    plugins: [\n      require(\"karma-jasmine\"),\n      require(\"karma-chrome-launcher\"),\n      require(\"karma-jasmine-html-reporter\"),\n      require(\"karma-coverage-istanbul-reporter\"),\n      require(\"@angular-devkit/build-angular/plugins/karma\"),\n    ],\n    client: {\n      clearContext: false, // leave Jasmine Spec Runner output visible in browser\n    },\n    coverageIstanbulReporter: {\n      dir: require(\"path\").join(__dirname, \"./coverage/angular\"),\n      reports: [\"html\", \"lcovonly\", \"text-summary\"],\n      fixWebpackSourcePaths: true,\n    },\n    reporters: [\"progress\", \"kjhtml\"],\n    port: 9876,\n    colors: true,\n    logLevel: config.LOG_INFO,\n    autoWatch: true,\n    browsers: [\"Chrome\"],\n    singleRun: false,\n    restartOnFileChange: true,\n  });\n};\n"
  },
  {
    "path": "docker/angular/package.json",
    "content": "{\n  \"name\": \"angular\",\n  \"version\": \"0.0.0\",\n  \"scripts\": {\n    \"ng\": \"ng\",\n    \"start\": \"ng serve\",\n    \"build\": \"ng build\",\n    \"test\": \"ng test\",\n    \"lint\": \"ng lint\",\n    \"e2e\": \"ng e2e\"\n  },\n  \"private\": true,\n  \"dependencies\": {\n    \"@angular/animations\": \"~8.2.14\",\n    \"@angular/common\": \"~8.2.14\",\n    \"@angular/compiler\": \"~8.2.14\",\n    \"@angular/core\": \"~8.2.14\",\n    \"@angular/forms\": \"~8.2.14\",\n    \"@angular/platform-browser\": \"~8.2.14\",\n    \"@angular/platform-browser-dynamic\": \"~8.2.14\",\n    \"@angular/router\": \"~8.2.14\",\n    \"ejs\": \"^3.1.5\",\n    \"express\": \"^4.17.1\",\n    \"rxjs\": \"~6.4.0\",\n    \"tslib\": \"^1.10.0\",\n    \"zone.js\": \"~0.9.1\"\n  },\n  \"devDependencies\": {\n    \"@angular-devkit/build-angular\": \"~0.803.23\",\n    \"@angular/cli\": \"~8.3.23\",\n    \"@angular/compiler-cli\": \"~8.2.14\",\n    \"@angular/language-service\": \"~8.2.14\",\n    \"@types/node\": \"~8.9.4\",\n    \"@types/jasmine\": \"~3.3.8\",\n    \"@types/jasminewd2\": \"~2.0.3\",\n    \"codelyzer\": \"^5.0.0\",\n    \"jasmine-core\": \"~3.4.0\",\n    \"jasmine-spec-reporter\": \"~4.2.1\",\n    \"karma\": \"~4.1.0\",\n    \"karma-chrome-launcher\": \"~2.2.0\",\n    \"karma-coverage-istanbul-reporter\": \"~2.0.1\",\n    \"karma-jasmine\": \"~2.0.1\",\n    \"karma-jasmine-html-reporter\": \"^1.4.0\",\n    \"protractor\": \"~5.4.0\",\n    \"ts-node\": \"~7.0.0\",\n    \"tslint\": \"~5.15.0\",\n    \"typescript\": \"~3.5.3\"\n  }\n}\n"
  },
  {
    "path": "docker/angular/server.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'dist/angular/')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n\n\n"
  },
  {
    "path": "docker/angular/src/app/app.component.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n  <head>\n    <title>Waypoint Angular Example</title>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/assets/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img class=\"logo\" src=\"/assets/language.svg\" alt=\"Angular Icon\" />\n        </div>\n        <h1>This Angular app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run\n          <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the\n          <a href=\"https://waypointproject.io/docs\">documentation</a> for more\n          about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/assets/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docker/angular/src/app/app.component.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n"
  },
  {
    "path": "docker/angular/src/app/app.component.spec.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { TestBed, async } from '@angular/core/testing';\nimport { AppComponent } from './app.component';\n\ndescribe('AppComponent', () => {\n  beforeEach(async(() => {\n    TestBed.configureTestingModule({\n      declarations: [\n        AppComponent\n      ],\n    }).compileComponents();\n  }));\n\n  it('should create the app', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app).toBeTruthy();\n  });\n\n  it(`should have as title 'angulardemo'`, () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    const app = fixture.debugElement.componentInstance;\n    expect(app.title).toEqual('angulardemo');\n  });\n\n  it('should render title', () => {\n    const fixture = TestBed.createComponent(AppComponent);\n    fixture.detectChanges();\n    const compiled = fixture.debugElement.nativeElement;\n    expect(compiled.querySelector('.content span').textContent).toContain('angulardemo app is running!');\n  });\n});\n"
  },
  {
    "path": "docker/angular/src/app/app.component.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { Component } from '@angular/core';\n\n@Component({\n  selector: 'app-root',\n  templateUrl: './app.component.html',\n  styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n  title = 'angulardemo';\n}\n"
  },
  {
    "path": "docker/angular/src/app/app.module.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\n\nimport { AppComponent } from './app.component';\n\n@NgModule({\n  declarations: [\n    AppComponent\n  ],\n  imports: [\n    BrowserModule\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule { }\n"
  },
  {
    "path": "docker/angular/src/assets/.gitkeep",
    "content": ""
  },
  {
    "path": "docker/angular/src/environments/environment.prod.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nexport const environment = {\n  production: true\n};\n"
  },
  {
    "path": "docker/angular/src/environments/environment.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// This file can be replaced during build by using the `fileReplacements` array.\n// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`.\n// The list of file replacements can be found in `angular.json`.\n\nexport const environment = {\n  production: false\n};\n\n/*\n * For easier debugging in development mode, you can import the following file\n * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.\n *\n * This import should be commented out in production mode because it will have a negative impact\n * on performance if an error is thrown.\n */\n// import 'zone.js/dist/zone-error';  // Included with Angular CLI.\n"
  },
  {
    "path": "docker/angular/src/index.html",
    "content": "<!doctype html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>Angular on Waypoint</title>\n  <base href=\"/\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"icon\" type=\"image/x-icon\" href=\"favicon.ico\">\n</head>\n<body>\n  <app-root></app-root>\n</body>\n</html>\n"
  },
  {
    "path": "docker/angular/src/main.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n  enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n  .catch(err => console.error(err));\n"
  },
  {
    "path": "docker/angular/src/polyfills.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n/**\n * This file includes polyfills needed by Angular and is loaded before the app.\n * You can add your own extra polyfills to this file.\n *\n * This file is divided into 2 sections:\n *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\n *   2. Application imports. Files imported after ZoneJS that should be loaded before your main\n *      file.\n *\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\n *\n * Learn more in https://angular.io/guide/browser-support\n */\n\n/***************************************************************************************************\n * BROWSER POLYFILLS\n */\n\n/** IE10 and IE11 requires the following for NgClass support on SVG elements */\n// import 'classlist.js';  // Run `npm install --save classlist.js`.\n\n/**\n * Web Animations `@angular/platform-browser/animations`\n * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.\n * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).\n */\n// import 'web-animations-js';  // Run `npm install --save web-animations-js`.\n\n/**\n * By default, zone.js will patch all possible macroTask and DomEvents\n * user can disable parts of macroTask/DomEvents patch by setting following flags\n * because those flags need to be set before `zone.js` being loaded, and webpack\n * will put import in the top of bundle, so user need to create a separate file\n * in this directory (for example: zone-flags.ts), and put the following flags\n * into that file, and then add the following code before importing zone.js.\n * import './zone-flags.ts';\n *\n * The flags allowed in zone-flags.ts are listed here.\n *\n * The following flags will work for all browsers.\n *\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\n *\n *  in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\n *  with the following flag, it will bypass `zone.js` patch for IE/Edge\n *\n *  (window as any).__Zone_enable_cross_context_check = true;\n *\n */\n\n/***************************************************************************************************\n * Zone JS is required by default for Angular itself.\n */\nimport 'zone.js/dist/zone';  // Included with Angular CLI.\n\n\n/***************************************************************************************************\n * APPLICATION IMPORTS\n */\n"
  },
  {
    "path": "docker/angular/src/styles.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #e4e5e7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #fff;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml,\nbody {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n    \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n    \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/assets/pattern-tl.svg), url(/assets/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), 0.5);\n  background: rgba(var(--brand), 0.15);\n}\n\nimg.logo {\n  max-width: 60px;\n  max-height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: \"SFMono-Regular\", Consolas, \"Liberation Mono\", Menlo, Courier,\n    monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, 0.15);\n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/angular/src/test.ts",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// This file is required by karma.conf.js and loads recursively all the .spec and framework files\n\nimport 'zone.js/dist/zone-testing';\nimport { getTestBed } from '@angular/core/testing';\nimport {\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\n\ndeclare const require: any;\n\n// First, initialize the Angular testing environment.\ngetTestBed().initTestEnvironment(\n  BrowserDynamicTestingModule,\n  platformBrowserDynamicTesting()\n);\n// Then we find all the tests.\nconst context = require.context('./', true, /\\.spec\\.ts$/);\n// And load the modules.\ncontext.keys().map(context);\n"
  },
  {
    "path": "docker/angular/tsconfig.app.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/app\",\n    \"types\": []\n  },\n  \"files\": [\n    \"src/main.ts\",\n    \"src/polyfills.ts\"\n  ],\n  \"include\": [\n    \"src/**/*.ts\"\n  ],\n  \"exclude\": [\n    \"src/test.ts\",\n    \"src/**/*.spec.ts\"\n  ]\n}\n"
  },
  {
    "path": "docker/angular/tsconfig.json",
    "content": "{\n  \"compileOnSave\": false,\n  \"compilerOptions\": {\n    \"baseUrl\": \"./\",\n    \"outDir\": \"./dist/out-tsc\",\n    \"sourceMap\": true,\n    \"declaration\": false,\n    \"downlevelIteration\": true,\n    \"experimentalDecorators\": true,\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"importHelpers\": true,\n    \"target\": \"es2015\",\n    \"typeRoots\": [\n      \"node_modules/@types\"\n    ],\n    \"lib\": [\n      \"es2018\",\n      \"dom\"\n    ]\n  },\n  \"angularCompilerOptions\": {\n    \"fullTemplateTypeCheck\": true,\n    \"strictInjectionParameters\": true\n  }\n}\n"
  },
  {
    "path": "docker/angular/tsconfig.spec.json",
    "content": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"outDir\": \"./out-tsc/spec\",\n    \"types\": [\n      \"jasmine\",\n      \"node\"\n    ]\n  },\n  \"files\": [\n    \"src/test.ts\",\n    \"src/polyfills.ts\"\n  ],\n  \"include\": [\n    \"src/**/*.spec.ts\",\n    \"src/**/*.d.ts\"\n  ]\n}\n"
  },
  {
    "path": "docker/angular/tslint.json",
    "content": "{\n  \"extends\": \"tslint:recommended\",\n  \"rules\": {\n    \"array-type\": false,\n    \"arrow-parens\": false,\n    \"deprecation\": {\n      \"severity\": \"warning\"\n    },\n    \"component-class-suffix\": true,\n    \"contextual-lifecycle\": true,\n    \"directive-class-suffix\": true,\n    \"directive-selector\": [\n      true,\n      \"attribute\",\n      \"app\",\n      \"camelCase\"\n    ],\n    \"component-selector\": [\n      true,\n      \"element\",\n      \"app\",\n      \"kebab-case\"\n    ],\n    \"import-blacklist\": [\n      true,\n      \"rxjs/Rx\"\n    ],\n    \"interface-name\": false,\n    \"max-classes-per-file\": false,\n    \"max-line-length\": [\n      true,\n      140\n    ],\n    \"member-access\": false,\n    \"member-ordering\": [\n      true,\n      {\n        \"order\": [\n          \"static-field\",\n          \"instance-field\",\n          \"static-method\",\n          \"instance-method\"\n        ]\n      }\n    ],\n    \"no-consecutive-blank-lines\": false,\n    \"no-console\": [\n      true,\n      \"debug\",\n      \"info\",\n      \"time\",\n      \"timeEnd\",\n      \"trace\"\n    ],\n    \"no-empty\": false,\n    \"no-inferrable-types\": [\n      true,\n      \"ignore-params\"\n    ],\n    \"no-non-null-assertion\": true,\n    \"no-redundant-jsdoc\": true,\n    \"no-switch-case-fall-through\": true,\n    \"no-var-requires\": false,\n    \"object-literal-key-quotes\": [\n      true,\n      \"as-needed\"\n    ],\n    \"object-literal-sort-keys\": false,\n    \"ordered-imports\": false,\n    \"quotemark\": [\n      true,\n      \"single\"\n    ],\n    \"trailing-comma\": false,\n    \"no-conflicting-lifecycle\": true,\n    \"no-host-metadata-property\": true,\n    \"no-input-rename\": true,\n    \"no-inputs-metadata-property\": true,\n    \"no-output-native\": true,\n    \"no-output-on-prefix\": true,\n    \"no-output-rename\": true,\n    \"no-outputs-metadata-property\": true,\n    \"template-banana-in-box\": true,\n    \"template-no-negated-async\": true,\n    \"use-lifecycle-interface\": true,\n    \"use-pipe-transform-interface\": true\n  },\n  \"rulesDirectory\": [\n    \"codelyzer\"\n  ]\n}"
  },
  {
    "path": "docker/angular/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"angular-example\"\n\napp \"angular\" {\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {\n    }\n  }\n}\n"
  },
  {
    "path": "docker/aspnetapp/.dockerignore",
    "content": "bin/\nobj/"
  },
  {
    "path": "docker/aspnetapp/.gitignore",
    "content": "bin/*\nobj/*\nout/*"
  },
  {
    "path": "docker/aspnetapp/Pages/Error.cshtml",
    "content": "﻿@page\r\n@model ErrorModel\r\n@{\r\n    ViewData[\"Title\"] = \"Error\";\r\n}\r\n\r\n<h1 class=\"text-danger\">Error.</h1>\r\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\r\n\r\n@if (Model.ShowRequestId)\r\n{\r\n    <p>\r\n        <strong>Request ID:</strong> <code>@Model.RequestId</code>\r\n    </p>\r\n}\r\n\r\n<h3>Development Mode</h3>\r\n<p>\r\n    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.\r\n</p>\r\n<p>\r\n    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>\r\n    It can result in displaying sensitive information from exceptions to end users.\r\n    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>\r\n    and restarting the app.\r\n</p>\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Error.cshtml.cs",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace aspnetapp.Pages\r\n{\r\n    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]\r\n    public class ErrorModel : PageModel\r\n    {\r\n        public string RequestId { get; set; }\r\n\r\n        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);\r\n\r\n        private readonly ILogger<ErrorModel> _logger;\r\n\r\n        public ErrorModel(ILogger<ErrorModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Index.cshtml",
    "content": "﻿@page\r\n@model IndexModel\r\n@{\r\n    ViewData[\"Title\"] = \"ASP.NET on Waypoint\";\r\n}\r\n\r\n<h1>This ASP.NET app was deployed with Waypoint.</h1>\r\n<p>\r\n    Try making a change to this text locally and run <code>waypoint up</code> again to see it.\r\n</p>\r\n<p>\r\n    Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\r\n</p>\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Index.cshtml.cs",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace aspnetapp.Pages\r\n{\r\n    public class IndexModel : PageModel\r\n    {\r\n        private readonly ILogger<IndexModel> _logger;\r\n\r\n        public IndexModel(ILogger<IndexModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Privacy.cshtml",
    "content": "﻿@page\r\n@model PrivacyModel\r\n@{\r\n    ViewData[\"Title\"] = \"Privacy Policy\";\r\n}\r\n<h1>@ViewData[\"Title\"]</h1>\r\n\r\n<p>Use this page to detail your site's privacy policy.</p>\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Privacy.cshtml.cs",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Mvc;\r\nusing Microsoft.AspNetCore.Mvc.RazorPages;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace aspnetapp.Pages\r\n{\r\n    public class PrivacyModel : PageModel\r\n    {\r\n        private readonly ILogger<PrivacyModel> _logger;\r\n\r\n        public PrivacyModel(ILogger<PrivacyModel> logger)\r\n        {\r\n            _logger = logger;\r\n        }\r\n\r\n        public void OnGet()\r\n        {\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\r\n<html>\r\n\r\n<head>\r\n    <title>@ViewData[\"Title\"] - Waypoint</title>\r\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\r\n</head>\r\n\r\n<body>\r\n    <div class=\"container\">\r\n        <header>\r\n            <a href=\"https://waypointproject.io\" class=\"logo\">\r\n                <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\r\n            </a>\r\n        </header>\r\n        <section class=\"content\">\r\n            <div class=\"language-icon\">\r\n                <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Flask Icon\" />\r\n            </div>\r\n            @RenderBody()\r\n        </section>\r\n        <footer>\r\n            <a href=\"https://hashicorp.com\" class=\"hashi\">\r\n                <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\r\n            </a>\r\n        </footer>\r\n    </div>\r\n</body>\r\n\r\n</html>"
  },
  {
    "path": "docker/aspnetapp/Pages/Shared/_ValidationScriptsPartial.cshtml",
    "content": "﻿<script src=\"~/lib/jquery-validation/dist/jquery.validate.min.js\"></script>\r\n<script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"></script>\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/_ViewImports.cshtml",
    "content": "@using aspnetapp\r\n@namespace aspnetapp.Pages\r\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\r\n"
  },
  {
    "path": "docker/aspnetapp/Pages/_ViewStart.cshtml",
    "content": "﻿@{\r\n    Layout = \"_Layout\";\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/Program.cs",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.Hosting;\r\nusing Microsoft.Extensions.Logging;\r\n\r\nnamespace aspnetapp\r\n{\r\n    public class Program\r\n    {\r\n        public static void Main(string[] args)\r\n        {\r\n            CreateHostBuilder(args).Build().Run();\r\n        }\r\n\r\n        public static IHostBuilder CreateHostBuilder(string[] args) =>\r\n            Host.CreateDefaultBuilder(args)\r\n                .ConfigureWebHostDefaults(webBuilder =>\r\n                {\r\n                    webBuilder.UseStartup<Startup>();\r\n                });\r\n    }\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/Properties/launchSettings.json",
    "content": "﻿{\r\n  \"iisSettings\": {\r\n    \"windowsAuthentication\": false,\r\n    \"anonymousAuthentication\": true,\r\n    \"iisExpress\": {\r\n      \"applicationUrl\": \"http://localhost:62275\",\r\n      \"sslPort\": 0\r\n    }\r\n  },\r\n  \"profiles\": {\r\n    \"IIS Express\": {\r\n      \"commandName\": \"IISExpress\",\r\n      \"launchBrowser\": true,\r\n      \"environmentVariables\": {\r\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n      }\r\n    },\r\n    \"aspnetapp\": {\r\n      \"commandName\": \"Project\",\r\n      \"launchBrowser\": true,\r\n      \"applicationUrl\": \"http://localhost:5000\",\r\n      \"environmentVariables\": {\r\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n      }\r\n    },\r\n    \"publicdev\": {\r\n      \"commandName\": \"Project\",\r\n      \"launchBrowser\": true,\r\n      \"applicationUrl\": \"http://+:80\",\r\n      \"environmentVariables\": {\r\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\r\n      }\r\n    }\r\n  }\r\n}"
  },
  {
    "path": "docker/aspnetapp/README.md",
    "content": "# Waypoint ASP.NET Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|ASP.NET|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nA barebones ASP.NET app (via [Microsoft docs](https://dotnet.microsoft.com/learn/aspnet/hello-world-tutorial/intro)) which can easily be deployed by Waypoint.\n\nUnder `Properties/launchSettings.json`, you must set `\"applicationUrl\": \"http://+:80\"` so it is accessible outside the container.\n\nThe buildpack defaults to port `8080`, so you must set `service_port = 8080` in the `deploy` stanza (as shown in `waypoint.hcl`)."
  },
  {
    "path": "docker/aspnetapp/Startup.cs",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AspNetCore.Builder;\r\nusing Microsoft.AspNetCore.Hosting;\r\nusing Microsoft.Extensions.Configuration;\r\nusing Microsoft.Extensions.DependencyInjection;\r\nusing Microsoft.Extensions.Hosting;\r\n\r\nnamespace aspnetapp\r\n{\r\n    public class Startup\r\n    {\r\n        public Startup(IConfiguration configuration)\r\n        {\r\n            Configuration = configuration;\r\n        }\r\n\r\n        public IConfiguration Configuration { get; }\r\n\r\n        // This method gets called by the runtime. Use this method to add services to the container.\r\n        public void ConfigureServices(IServiceCollection services)\r\n        {\r\n            services.AddRazorPages();\r\n        }\r\n\r\n        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.\r\n        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)\r\n        {\r\n            if (env.IsDevelopment())\r\n            {\r\n                app.UseDeveloperExceptionPage();\r\n            }\r\n            else\r\n            {\r\n                app.UseExceptionHandler(\"/Error\");\r\n            }\r\n\r\n            app.UseStaticFiles();\r\n\r\n            app.UseRouting();\r\n\r\n            app.UseAuthorization();\r\n\r\n            app.UseEndpoints(endpoints =>\r\n            {\r\n                endpoints.MapRazorPages();\r\n            });\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/appsettings.Development.json",
    "content": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\n  }\n}\n"
  },
  {
    "path": "docker/aspnetapp/appsettings.json",
    "content": "{\r\n  \"Logging\": {\r\n    \"LogLevel\": {\r\n      \"Default\": \"Information\",\r\n      \"Microsoft\": \"Warning\",\r\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\r\n    }\r\n  },\r\n  \"AllowedHosts\": \"*\"\r\n}\r\n"
  },
  {
    "path": "docker/aspnetapp/aspnetapp.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.Web\">\r\n\r\n  <PropertyGroup>\r\n    <TargetFramework>netcoreapp3.1</TargetFramework>\r\n  </PropertyGroup>\r\n\r\n</Project>\r\n"
  },
  {
    "path": "docker/aspnetapp/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-dotnet\"\n\napp \"web\" {\n  labels = {\n    \"service\" = \"example-dotnet\",\n    \"env\"     = \"dev\"\n  }\n  build {\n    use \"pack\" {\n      builder = \"paketobuildpacks/builder:full\"\n    }\n  }\n\n  # Deploy to Docker\n  deploy {\n    use \"docker\" {\n      service_port = 8080\n    }\n  }\n}\n"
  },
  {
    "path": "docker/aspnetapp/wwwroot/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/go/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                          |\n| -------- | ------------------------------------------------------------------------------------ |\n| Pack     | Cloud Native Buildpack                                                               |\n| Cloud    | Local                                                                                |\n| Language | Go                                                                                   |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                              |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker) |\n\nA barebones Go API, which can easily be deployed by Waypoint.\n"
  },
  {
    "path": "docker/go/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/docker/go\n\n// +heroku goVersion go1.15\ngo 1.15\n"
  },
  {
    "path": "docker/go/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "docker/go/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "docker/go/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/go/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-go\"\n\napp \"example-go\" {\n  labels = {\n    \"service\" = \"example-go\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "docker/go-multiapp/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                          |\n| -------- | ------------------------------------------------------------------------------------ |\n| Pack     | Cloud Native Buildpack                                                               |\n| Cloud    | Local                                                                                |\n| Language | Go                                                                                   |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                              |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker) |\n\nA barebones Go API, which can easily be deployed by Waypoint.\n"
  },
  {
    "path": "docker/go-multiapp/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/docker/go-multiapp\n\n// +heroku goVersion go1.17\ngo 1.17\n"
  },
  {
    "path": "docker/go-multiapp/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "docker/go-multiapp/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "docker/go-multiapp/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/go-multiapp/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-go\"\n\napp \"app-1\" {\n  labels = {\n    \"service\" = \"app-1\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n\napp \"app-2\" {\n  labels = {\n    \"service\" = \"app-2\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "docker/java/.gitignore",
    "content": "target/\n.env\n.waypoint/\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n!**/src/main/**/build/\n!**/src/test/**/build/\n\n### VS Code ###\n.vscode/"
  },
  {
    "path": "docker/java/.mvn/wrapper/maven-wrapper.properties",
    "content": "distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip"
  },
  {
    "path": "docker/java/README.md",
    "content": "# Java Getting Started\n\n|Title|Description|\n|---|---|\n|Pack|Multiple (read notes below)|\n|Cloud|Multiple|\n|Language|Java|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nThis is an example Java Spring application that can be deployed with Waypoint.\n\nWaypoint defaults to using Heroku buildpacks if you do not specify a [builder variable](https://waypointproject.io/plugins/pack#builder) in the `waypoint.hcl` configuration section for `pack` within the `build` section. This example uses Heroku buildpacks by default.\n\nThis example also supports using [Cloud Foundry Paketo Buildpacks](https://paketo.io/docs/) and [Google Cloud Platform (GCP) Buildpacks](https://github.com/GoogleCloudPlatform/buildpacks).\n\n# Deploying the example application.\n\n1. Install a Waypoint Server up and ensure `waypoint context verify` is successful.\n1. `waypoint init`\n1. `waypoint up`\n1. Visit a URL provided in the `waypoint` output.\n\n## Configuring Waypoint for Cloud Foundry Paketo or GCP Buildpacks.\n\nCopy the contents of `waypoint.hcl.paketo` or `waypoint.hcl.gcp` file into `waypoint.hcl` or run a command like `cp waypoint.hcl.paketo waypoint.hcl` from the base directory. Then you can run the `waypoint` commands as described above.\n\nThere are several `waypoint.hcl` adjustments to enable non-Heroku Buildpacks.\n1. The `builder` variable of the `pack` build plugin should specify the a Paketo buildpacks builder image like `paketobuildpacks/builder:base` or  `gcr.io/buildpacks/builder:v1`. If no builder image is specified, Waypoint uses the Heroku builder image `heroku/buildpacks:18` by default.\n1. The `service_port` variable of the deploy plugin explicity specifies port `8080` which is commonly used by Paketo and GCP buildpacks. The default Waypoint `service_port` is `3000`.\n\nHere is a full `waypoint.hcl` example that works with Paketo buildpacks.\n\n```\nproject = \"example-java\"\n\napp \"example-java\" {\n    build {\n        use \"pack\" {\n            builder=\"paketobuildpacks/builder:base\"\n        }\n    }\n    deploy {\n        use \"docker\" {\n            service_port=8080\n        }\n    }\n}\n```\n\nHere is a full `waypoint.hcl` example that works with GCP buildpacks.\n\n```\nproject = \"example-java\"\n\napp \"example-java\" {\n    build {\n        use \"pack\" {\n            builder=\"gcr.io/buildpacks/builder:v1\"\n        }\n    }\n    deploy {\n        use \"docker\" {\n            service_port=8080\n        }\n    }\n}\n```\n"
  },
  {
    "path": "docker/java/mvnw",
    "content": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven2 Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home\n    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html\n    if [ -z \"$JAVA_HOME\" ]; then\n      if [ -x \"/usr/libexec/java_home\" ]; then\n        export JAVA_HOME=\"`/usr/libexec/java_home`\"\n      else\n        export JAVA_HOME=\"/Library/Java/Home\"\n      fi\n    fi\n    ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Mingw, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\n  # TODO classpath?\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n\n  if [ -z \"$1\" ]\n  then\n    echo \"Path not specified to find_maven_basedir\"\n    return 1\n  fi\n\n  basedir=\"$1\"\n  wdir=\"$1\"\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    # workaround for JBEAP-8937 (on Solaris 10/Sparc)\n    if [ -d \"${wdir}\" ]; then\n      wdir=`cd \"$wdir/..\"; pwd`\n    fi\n    # end of workaround\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nBASE_DIR=`find_maven_basedir \"$(pwd)\"`\nif [ -z \"$BASE_DIR\" ]; then\n  exit 1;\nfi\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-\"$BASE_DIR\"}\nif [ \"$MVNW_VERBOSE\" = true ]; then\n  echo $MAVEN_PROJECTBASEDIR\nfi\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\n  [ -n \"$MAVEN_PROJECTBASEDIR\" ] &&\n    MAVEN_PROJECTBASEDIR=`cygpath --path --windows \"$MAVEN_PROJECTBASEDIR\"`\nfi\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG \"$@\"\n#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home\n    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html\n    if [ -z \"$JAVA_HOME\" ]; then\n      if [ -x \"/usr/libexec/java_home\" ]; then\n        export JAVA_HOME=\"`/usr/libexec/java_home`\"\n      else\n        export JAVA_HOME=\"/Library/Java/Home\"\n      fi\n    fi\n    ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Mingw, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n\n  if [ -z \"$1\" ]\n  then\n    echo \"Path not specified to find_maven_basedir\"\n    return 1\n  fi\n\n  basedir=\"$1\"\n  wdir=\"$1\"\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    # workaround for JBEAP-8937 (on Solaris 10/Sparc)\n    if [ -d \"${wdir}\" ]; then\n      wdir=`cd \"$wdir/..\"; pwd`\n    fi\n    # end of workaround\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nBASE_DIR=`find_maven_basedir \"$(pwd)\"`\nif [ -z \"$BASE_DIR\" ]; then\n  exit 1;\nfi\n\n##########################################################################################\n# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\n# This allows using the maven wrapper in projects that prohibit checking in binary data.\n##########################################################################################\nif [ -r \"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\" ]; then\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Found .mvn/wrapper/maven-wrapper.jar\"\n    fi\nelse\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ...\"\n    fi\n    if [ -n \"$MVNW_REPOURL\" ]; then\n      jarUrl=\"$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\n    else\n      jarUrl=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\n    fi\n    while IFS=\"=\" read key value; do\n      case \"$key\" in (wrapperUrl) jarUrl=\"$value\"; break ;;\n      esac\n    done < \"$BASE_DIR/.mvn/wrapper/maven-wrapper.properties\"\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Downloading from: $jarUrl\"\n    fi\n    wrapperJarPath=\"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\"\n    if $cygwin; then\n      wrapperJarPath=`cygpath --path --windows \"$wrapperJarPath\"`\n    fi\n\n    if command -v wget > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found wget ... using wget\"\n        fi\n        if [ -z \"$MVNW_USERNAME\" ] || [ -z \"$MVNW_PASSWORD\" ]; then\n            wget \"$jarUrl\" -O \"$wrapperJarPath\"\n        else\n            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD \"$jarUrl\" -O \"$wrapperJarPath\"\n        fi\n    elif command -v curl > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found curl ... using curl\"\n        fi\n        if [ -z \"$MVNW_USERNAME\" ] || [ -z \"$MVNW_PASSWORD\" ]; then\n            curl -o \"$wrapperJarPath\" \"$jarUrl\" -f\n        else\n            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o \"$wrapperJarPath\" \"$jarUrl\" -f\n        fi\n\n    else\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Falling back to using Java to download\"\n        fi\n        javaClass=\"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java\"\n        # For Cygwin, switch paths to Windows format before running javac\n        if $cygwin; then\n          javaClass=`cygpath --path --windows \"$javaClass\"`\n        fi\n        if [ -e \"$javaClass\" ]; then\n            if [ ! -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Compiling MavenWrapperDownloader.java ...\"\n                fi\n                # Compiling the Java class\n                (\"$JAVA_HOME/bin/javac\" \"$javaClass\")\n            fi\n            if [ -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                # Running the downloader\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Running MavenWrapperDownloader.java ...\"\n                fi\n                (\"$JAVA_HOME/bin/java\" -cp .mvn/wrapper MavenWrapperDownloader \"$MAVEN_PROJECTBASEDIR\")\n            fi\n        fi\n    fi\nfi\n##########################################################################################\n# End of extension\n##########################################################################################\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-\"$BASE_DIR\"}\nif [ \"$MVNW_VERBOSE\" = true ]; then\n  echo $MAVEN_PROJECTBASEDIR\nfi\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\n  [ -n \"$MAVEN_PROJECTBASEDIR\" ] &&\n    MAVEN_PROJECTBASEDIR=`cygpath --path --windows \"$MAVEN_PROJECTBASEDIR\"`\nfi\n\n# Provide a \"standardized\" way to retrieve the CLI args that will\n# work with both Windows and non-Windows executions.\nMAVEN_CMD_LINE_ARGS=\"$MAVEN_CONFIG $@\"\nexport MAVEN_CMD_LINE_ARGS\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG \"$@\"\n"
  },
  {
    "path": "docker/java/mvnw.cmd",
    "content": "@REM ----------------------------------------------------------------------------\r\n@REM Licensed to the Apache Software Foundation (ASF) under one\r\n@REM or more contributor license agreements.  See the NOTICE file\r\n@REM distributed with this work for additional information\r\n@REM regarding copyright ownership.  The ASF licenses this file\r\n@REM to you under the Apache License, Version 2.0 (the\r\n@REM \"License\"); you may not use this file except in compliance\r\n@REM with the License.  You may obtain a copy of the License at\r\n@REM\r\n@REM    https://www.apache.org/licenses/LICENSE-2.0\r\n@REM\r\n@REM Unless required by applicable law or agreed to in writing,\r\n@REM software distributed under the License is distributed on an\r\n@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n@REM KIND, either express or implied.  See the License for the\r\n@REM specific language governing permissions and limitations\r\n@REM under the License.\r\n@REM ----------------------------------------------------------------------------\r\n\r\n@REM ----------------------------------------------------------------------------\r\n@REM Maven Start Up Batch script\r\n@REM\r\n@REM Required ENV vars:\r\n@REM JAVA_HOME - location of a JDK home dir\r\n@REM\r\n@REM Optional ENV vars\r\n@REM M2_HOME - location of maven2's installed home dir\r\n@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands\r\n@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending\r\n@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven\r\n@REM     e.g. to debug Maven itself, use\r\n@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\r\n@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files\r\n@REM ----------------------------------------------------------------------------\r\n\r\n@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'\r\n@echo off\r\n@REM set title of command window\r\ntitle %0\r\n@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'\r\n@if \"%MAVEN_BATCH_ECHO%\" == \"on\"  echo %MAVEN_BATCH_ECHO%\r\n\r\n@REM set %HOME% to equivalent of $HOME\r\nif \"%HOME%\" == \"\" (set \"HOME=%HOMEDRIVE%%HOMEPATH%\")\r\n\r\n@REM Execute a user defined script before this one\r\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPre\r\n@REM check for pre script, once with legacy .bat ending and once with .cmd ending\r\nif exist \"%HOME%\\mavenrc_pre.bat\" call \"%HOME%\\mavenrc_pre.bat\"\r\nif exist \"%HOME%\\mavenrc_pre.cmd\" call \"%HOME%\\mavenrc_pre.cmd\"\r\n:skipRcPre\r\n\r\n@setlocal\r\n\r\nset ERROR_CODE=0\r\n\r\n@REM To isolate internal variables from possible post scripts, we use another setlocal\r\n@setlocal\r\n\r\n@REM ==== START VALIDATION ====\r\nif not \"%JAVA_HOME%\" == \"\" goto OkJHome\r\n\r\necho.\r\necho Error: JAVA_HOME not found in your environment. >&2\r\necho Please set the JAVA_HOME variable in your environment to match the >&2\r\necho location of your Java installation. >&2\r\necho.\r\ngoto error\r\n\r\n:OkJHome\r\nif exist \"%JAVA_HOME%\\bin\\java.exe\" goto init\r\n\r\necho.\r\necho Error: JAVA_HOME is set to an invalid directory. >&2\r\necho JAVA_HOME = \"%JAVA_HOME%\" >&2\r\necho Please set the JAVA_HOME variable in your environment to match the >&2\r\necho location of your Java installation. >&2\r\necho.\r\ngoto error\r\n\r\n@REM ==== END VALIDATION ====\r\n\r\n:init\r\n\r\n@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".\r\n@REM Fallback to current working directory if not found.\r\n\r\nset MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%\r\nIF NOT \"%MAVEN_PROJECTBASEDIR%\"==\"\" goto endDetectBaseDir\r\n\r\nset EXEC_DIR=%CD%\r\nset WDIR=%EXEC_DIR%\r\n:findBaseDir\r\nIF EXIST \"%WDIR%\"\\.mvn goto baseDirFound\r\ncd ..\r\nIF \"%WDIR%\"==\"%CD%\" goto baseDirNotFound\r\nset WDIR=%CD%\r\ngoto findBaseDir\r\n\r\n:baseDirFound\r\nset MAVEN_PROJECTBASEDIR=%WDIR%\r\ncd \"%EXEC_DIR%\"\r\ngoto endDetectBaseDir\r\n\r\n:baseDirNotFound\r\nset MAVEN_PROJECTBASEDIR=%EXEC_DIR%\r\ncd \"%EXEC_DIR%\"\r\n\r\n:endDetectBaseDir\r\n\r\nIF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig\r\n\r\n@setlocal EnableExtensions EnableDelayedExpansion\r\nfor /F \"usebackq delims=\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a\r\n@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%\r\n\r\n:endReadAdditionalConfig\r\n\r\nSET MAVEN_JAVA_EXE=\"%JAVA_HOME%\\bin\\java.exe\"\r\nset WRAPPER_JAR=\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.jar\"\r\nset WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\r\n\r\nset DOWNLOAD_URL=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\r\n\r\nFOR /F \"tokens=1,2 delims==\" %%A IN (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.properties\") DO (\r\n    IF \"%%A\"==\"wrapperUrl\" SET DOWNLOAD_URL=%%B\r\n)\r\n\r\n@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\r\n@REM This allows using the maven wrapper in projects that prohibit checking in binary data.\r\nif exist %WRAPPER_JAR% (\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Found %WRAPPER_JAR%\r\n    )\r\n) else (\r\n    if not \"%MVNW_REPOURL%\" == \"\" (\r\n        SET DOWNLOAD_URL=\"%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\r\n    )\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Couldn't find %WRAPPER_JAR%, downloading it ...\r\n        echo Downloading from: %DOWNLOAD_URL%\r\n    )\r\n\r\n    powershell -Command \"&{\"^\r\n\t\t\"$webclient = new-object System.Net.WebClient;\"^\r\n\t\t\"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {\"^\r\n\t\t\"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');\"^\r\n\t\t\"}\"^\r\n\t\t\"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')\"^\r\n\t\t\"}\"\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Finished downloading %WRAPPER_JAR%\r\n    )\r\n)\r\n@REM End of extension\r\n\r\n@REM Provide a \"standardized\" way to retrieve the CLI args that will\r\n@REM work with both Windows and non-Windows executions.\r\nset MAVEN_CMD_LINE_ARGS=%*\r\n\r\n%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% \"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%\" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*\r\nif ERRORLEVEL 1 goto error\r\ngoto end\r\n\r\n:error\r\nset ERROR_CODE=1\r\n\r\n:end\r\n@endlocal & set ERROR_CODE=%ERROR_CODE%\r\n\r\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPost\r\n@REM check for post script, once with legacy .bat ending and once with .cmd ending\r\nif exist \"%HOME%\\mavenrc_post.bat\" call \"%HOME%\\mavenrc_post.bat\"\r\nif exist \"%HOME%\\mavenrc_post.cmd\" call \"%HOME%\\mavenrc_post.cmd\"\r\n:skipRcPost\r\n\r\n@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'\r\nif \"%MAVEN_BATCH_PAUSE%\" == \"on\" pause\r\n\r\nif \"%MAVEN_TERMINATE_CMD%\" == \"on\" exit %ERROR_CODE%\r\n\r\nexit /B %ERROR_CODE%\r\n"
  },
  {
    "path": "docker/java/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.3.4.RELEASE</version>\n\t\t<relativePath/> <!-- lookup parent from repository -->\n\t</parent>\n\t<groupId>com.example</groupId>\n\t<artifactId>waypoint</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<name>waypoint</name>\n\t<description>Demo project for Spring Boot</description>\n\n\t<properties>\n\t\t<java.version>11</java.version>\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-actuator</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-thymeleaf</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.junit.vintage</groupId>\n\t\t\t\t\t<artifactId>junit-vintage-engine</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n</project>\n"
  },
  {
    "path": "docker/java/src/main/java/com/example/waypoint/WaypointApplication.java",
    "content": "/*\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\npackage com.example.waypoint;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n@Controller\n@SpringBootApplication\npublic class WaypointApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(WaypointApplication.class, args);\n\t}\n\n\t@RequestMapping(\"/\")\n\tString index() {\n\t  return \"index\";\n\t}\n\n}\n"
  },
  {
    "path": "docker/java/src/main/resources/application.properties",
    "content": "\n"
  },
  {
    "path": "docker/java/src/main/resources/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "docker/java/src/main/resources/templates/fragments/layout.html",
    "content": "<!doctype html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html th:fragment=\"layout (template, menu)\">\n<head>\n    <title>Waypoint Java Example</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n</head>\n\n<body>\n    <div th:replace=\"${template}\"/>\n\n    <script th:src=\"@{/webjars/jquery/jquery.min.js}\"></script>\n    <script th:src=\"@{/webjars/jquery-ui/jquery-ui.min.js}\"></script>\n</body>\n"
  },
  {
    "path": "docker/java/src/main/resources/templates/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html xmlns:th=\"http://www.thymeleaf.org\" th:replace=\"~{fragments/layout :: layout (~{::body},'index')}\">\n\n<body>\n\n  <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Java Icon\" />\n        </div>\n        <h1>This Java app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n\n</body>\n</html>\n"
  },
  {
    "path": "docker/java/src/test/java/com/example/waypoint/WaypointApplicationTests.java",
    "content": "/*\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\npackage com.example.waypoint;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\nclass WaypointApplicationTests {\n\n\t@Test\n\tvoid contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "docker/java/system.properties",
    "content": "java.runtime.version=11"
  },
  {
    "path": "docker/java/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-java\"\n\napp \"example-java\" {\n  build {\n    use \"pack\" {\n      builder = \"gcr.io/buildpacks/builder:v1\"\n    }\n  }\n  deploy {\n    use \"docker\" {\n      service_port = 8080\n    }\n  }\n}\n"
  },
  {
    "path": "docker/java/waypoint.hcl.gcp",
    "content": "project = \"example-java\"\n\napp \"example-java\" {\n    build {\n        use \"pack\" {\n            builder=\"gcr.io/buildpacks/builder:v1\"\n        }\n    }\n    deploy {\n        use \"docker\" {\n          service_port=8080\n        }\n    }\n}"
  },
  {
    "path": "docker/java/waypoint.hcl.heroku",
    "content": "project = \"example-java\"\n\napp \"example-java\" {\n    build {\n        use \"pack\" {}\n    }\n    deploy {\n        use \"docker\" {}\n    }\n}\n"
  },
  {
    "path": "docker/java/waypoint.hcl.paketo",
    "content": "project = \"example-java\"\n\napp \"example-java\" {\n    build {\n        use \"pack\" {\n            builder=\"paketobuildpacks/builder:base\"\n        }\n    }\n    deploy {\n        use \"docker\" {\n            service_port=8080\n        }\n    }\n}"
  },
  {
    "path": "docker/next-js/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# next.js\n/.next/\n/out/\n\n# production\n/build\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# local env files\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\n# vercel\n.vercel\n"
  },
  {
    "path": "docker/next-js/README.md",
    "content": "# Waypoint Next.js Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|JavaScript|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\n"
  },
  {
    "path": "docker/next-js/package.json",
    "content": "{\n  \"name\": \"next-js\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"next dev\",\n    \"build\": \"next build\",\n    \"start\": \"next start\"\n  },\n  \"dependencies\": {\n    \"next\": \"9.5.1\",\n    \"react\": \"16.13.1\",\n    \"react-dom\": \"16.13.1\"\n  }\n}\n"
  },
  {
    "path": "docker/next-js/pages/_app.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport '../styles/globals.css'\n\nfunction MyApp({ Component, pageProps }) {\n  return <Component {...pageProps} />\n}\n\nexport default MyApp\n"
  },
  {
    "path": "docker/next-js/pages/api/hello.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Next.js API route support: https://nextjs.org/docs/api-routes/introduction\n\nexport default (req, res) => {\n  res.statusCode = 200\n  res.json({ name: 'John Doe' })\n}\n"
  },
  {
    "path": "docker/next-js/pages/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport Head from 'next/head'\nimport styles from '../styles/Home.module.css'\n\nexport default function Home() {\n  return (\n    <div className={styles.container}>\n      <Head>\n        <title>Waypoint Next.js Example</title>\n        <link rel=\"icon\" href=\"/favicon.ico\" />\n      </Head>\n      \n      <header>\n        <a href=\"https://waypointproject.io\" className={styles.logo}>\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section className={styles.content}>\n        <div className={styles.language}>\n          <img src=\"/language.svg\" alt=\"Next.js Icon\" />\n        </div>\n        <h1>This Next.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" className={styles.hashi}>\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  )\n}\n"
  },
  {
    "path": "docker/next-js/styles/Home.module.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\n.content {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\n.content h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\n.content p {\n  padding-top: 12px;\n}\n\n.content code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\n.content a {\n  color: rgb(var(--brand));\n}\n\n.language {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}"
  },
  {
    "path": "docker/next-js/styles/globals.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}"
  },
  {
    "path": "docker/next-js/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-nextjs\"\n\napp \"example-nextjs\" {\n  labels = {\n    \"service\" = \"example-nextjs\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "docker/nodejs/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n"
  },
  {
    "path": "docker/nodejs/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "docker/nodejs/README.md",
    "content": "# Waypoint NodeJS Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|JavaScript|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\n"
  },
  {
    "path": "docker/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "docker/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "docker/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "docker/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "docker/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "docker/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-nodejs\"\n\napp \"example-nodejs\" {\n  labels = {\n    \"service\" = \"example-nodejs\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "docker/php/.editorconfig",
    "content": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n[*.{yml,yaml}]\nindent_size = 2\n"
  },
  {
    "path": "docker/php/.gitattributes",
    "content": "* text=auto\n*.css linguist-vendored\n*.scss linguist-vendored\n*.js linguist-vendored\nCHANGELOG.md export-ignore\n"
  },
  {
    "path": "docker/php/.gitignore",
    "content": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n.env.backup\n.phpunit.result.cache\nHomestead.json\nHomestead.yaml\nnpm-debug.log\nyarn-error.log\n"
  },
  {
    "path": "docker/php/.styleci.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nphp:\n  preset: laravel\n  disabled:\n    - unused_use\n  finder:\n    not-name:\n      - index.php\n      - server.php\njs:\n  finder:\n    not-name:\n      - webpack.mix.js\ncss: true\n"
  },
  {
    "path": "docker/php/Procfile",
    "content": "web: vendor/bin/heroku-php-nginx public/\n"
  },
  {
    "path": "docker/php/README.md",
    "content": "# Waypoint PHP Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|PHP|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nA barebones Laravel 8 app, which can easily be deployed by Waypoint.\n\nThis repository provides an .env file to make it easy to deploy the example,\nhowever these environment variables should be managed using `waypoint config`.\n\nLaravel `TrustProxies` has been set to `*` as an example to allow Laravel to\ngenerate the correct SSL asset URL.\n"
  },
  {
    "path": "docker/php/app/Console/Kernel.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Console;\n\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\n\nclass Kernel extends ConsoleKernel\n{\n    /**\n     * The Artisan commands provided by your application.\n     *\n     * @var array\n     */\n    protected $commands = [\n        //\n    ];\n\n    /**\n     * Define the application's command schedule.\n     *\n     * @param  \\Illuminate\\Console\\Scheduling\\Schedule  $schedule\n     * @return void\n     */\n    protected function schedule(Schedule $schedule)\n    {\n        // $schedule->command('inspire')->hourly();\n    }\n\n    /**\n     * Register the commands for the application.\n     *\n     * @return void\n     */\n    protected function commands()\n    {\n        $this->load(__DIR__.'/Commands');\n\n        require base_path('routes/console.php');\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Exceptions/Handler.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Exceptions;\n\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that are not reported.\n     *\n     * @var array\n     */\n    protected $dontReport = [\n        //\n    ];\n\n    /**\n     * A list of the inputs that are never flashed for validation exceptions.\n     *\n     * @var array\n     */\n    protected $dontFlash = [\n        'password',\n        'password_confirmation',\n    ];\n\n    /**\n     * Register the exception handling callbacks for the application.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Http/Controllers/Controller.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Routing\\Controller as BaseController;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;\n}\n"
  },
  {
    "path": "docker/php/app/Http/Kernel.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    /**\n     * The application's global HTTP middleware stack.\n     *\n     * These middleware are run during every request to your application.\n     *\n     * @var array\n     */\n    protected $middleware = [\n        // \\App\\Http\\Middleware\\TrustHosts::class,\n        \\App\\Http\\Middleware\\TrustProxies::class,\n        \\Fruitcake\\Cors\\HandleCors::class,\n        \\App\\Http\\Middleware\\PreventRequestsDuringMaintenance::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::class,\n        \\App\\Http\\Middleware\\TrimStrings::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::class,\n    ];\n\n    /**\n     * The application's route middleware groups.\n     *\n     * @var array\n     */\n    protected $middlewareGroups = [\n        'web' => [\n            \\App\\Http\\Middleware\\EncryptCookies::class,\n            \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n            \\Illuminate\\Session\\Middleware\\StartSession::class,\n            // \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,\n            \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n            \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n            \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        ],\n\n        'api' => [\n            'throttle:api',\n            \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        ],\n    ];\n\n    /**\n     * The application's route middleware.\n     *\n     * These middleware may be assigned to groups or used individually.\n     *\n     * @var array\n     */\n    protected $routeMiddleware = [\n        'auth' => \\App\\Http\\Middleware\\Authenticate::class,\n        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        'cache.headers' => \\Illuminate\\Http\\Middleware\\SetCacheHeaders::class,\n        'can' => \\Illuminate\\Auth\\Middleware\\Authorize::class,\n        'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n        'password.confirm' => \\Illuminate\\Auth\\Middleware\\RequirePassword::class,\n        'signed' => \\Illuminate\\Routing\\Middleware\\ValidateSignature::class,\n        'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n        'verified' => \\Illuminate\\Auth\\Middleware\\EnsureEmailIsVerified::class,\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/Authenticate.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Auth\\Middleware\\Authenticate as Middleware;\n\nclass Authenticate extends Middleware\n{\n    /**\n     * Get the path the user should be redirected to when they are not authenticated.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return string|null\n     */\n    protected function redirectTo($request)\n    {\n        if (! $request->expectsJson()) {\n            return route('login');\n        }\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as Middleware;\n\nclass EncryptCookies extends Middleware\n{\n    /**\n     * The names of the cookies that should not be encrypted.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/PreventRequestsDuringMaintenance.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance as Middleware;\n\nclass PreventRequestsDuringMaintenance extends Middleware\n{\n    /**\n     * The URIs that should be reachable while maintenance mode is enabled.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/RedirectIfAuthenticated.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse App\\Providers\\RouteServiceProvider;\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @param  string|null  ...$guards\n     * @return mixed\n     */\n    public function handle($request, Closure $next, ...$guards)\n    {\n        $guards = empty($guards) ? [null] : $guards;\n\n        foreach ($guards as $guard) {\n            if (Auth::guard($guard)->check()) {\n                return redirect(RouteServiceProvider::HOME);\n            }\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/TrimStrings.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as Middleware;\n\nclass TrimStrings extends Middleware\n{\n    /**\n     * The names of the attributes that should not be trimmed.\n     *\n     * @var array\n     */\n    protected $except = [\n        'password',\n        'password_confirmation',\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/TrustHosts.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Http\\Middleware\\TrustHosts as Middleware;\n\nclass TrustHosts extends Middleware\n{\n    /**\n     * Get the host patterns that should be trusted.\n     *\n     * @return array\n     */\n    public function hosts()\n    {\n        return [\n            $this->allSubdomainsOfApplicationUrl(),\n        ];\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/TrustProxies.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Fideloper\\Proxy\\TrustProxies as Middleware;\nuse Illuminate\\Http\\Request;\n\nclass TrustProxies extends Middleware\n{\n    /**\n     * The trusted proxies for this application.\n     *\n     * @var array|string|null\n     */\n    protected $proxies = '*';\n\n    /**\n     * The headers that should be used to detect proxies.\n     *\n     * @var int\n     */\n    protected $headers = Request::HEADER_X_FORWARDED_ALL;\n}\n"
  },
  {
    "path": "docker/php/app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as Middleware;\n\nclass VerifyCsrfToken extends Middleware\n{\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Models/User.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Models;\n\nuse Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\n\nclass User extends Authenticatable\n{\n    use HasFactory, Notifiable;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    /**\n     * The attributes that should be hidden for arrays.\n     *\n     * @var array\n     */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n\n    /**\n     * The attributes that should be cast to native types.\n     *\n     * @var array\n     */\n    protected $casts = [\n        'email_verified_at' => 'datetime',\n    ];\n}\n"
  },
  {
    "path": "docker/php/app/Providers/AppServiceProvider.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n    }\n\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Providers/AuthServiceProvider.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Providers;\n\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Gate;\n\nclass AuthServiceProvider extends ServiceProvider\n{\n    /**\n     * The policy mappings for the application.\n     *\n     * @var array\n     */\n    protected $policies = [\n        // 'App\\Model' => 'App\\Policies\\ModelPolicy',\n    ];\n\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->registerPolicies();\n\n        //\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Providers/BroadcastServiceProvider.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Broadcast;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass BroadcastServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Broadcast::routes();\n\n        require base_path('routes/channels.php');\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Providers/EventServiceProvider.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Providers;\n\nuse Illuminate\\Auth\\Events\\Registered;\nuse Illuminate\\Auth\\Listeners\\SendEmailVerificationNotification;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\nuse Illuminate\\Support\\Facades\\Event;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     *\n     * @var array\n     */\n    protected $listen = [\n        Registered::class => [\n            SendEmailVerificationNotification::class,\n        ],\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "docker/php/app/Providers/RouteServiceProvider.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace App\\Providers;\n\nuse Illuminate\\Cache\\RateLimiting\\Limit;\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\RateLimiter;\nuse Illuminate\\Support\\Facades\\Route;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n    /**\n     * The path to the \"home\" route for your application.\n     *\n     * This is used by Laravel authentication to redirect users after login.\n     *\n     * @var string\n     */\n    public const HOME = '/home';\n\n    /**\n     * If specified, this namespace is automatically applied to your controller routes.\n     *\n     * In addition, it is set as the URL generator's root namespace.\n     *\n     * @var string\n     */\n    protected $namespace = null;\n\n    /**\n     * Define your route model bindings, pattern filters, etc.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->configureRateLimiting();\n\n        $this->routes(function () {\n            Route::middleware('web')\n                ->group(base_path('routes/web.php'));\n\n            Route::prefix('api')\n                ->middleware('api')\n                ->group(base_path('routes/api.php'));\n        });\n    }\n\n    /**\n     * Configure the rate limiters for the application.\n     *\n     * @return void\n     */\n    protected function configureRateLimiting()\n    {\n        RateLimiter::for('api', function (Request $request) {\n            return Limit::perMinute(60);\n        });\n    }\n}\n"
  },
  {
    "path": "docker/php/artisan",
    "content": "#!/usr/bin/env php\n<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/vendor/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running, we will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "docker/php/bootstrap/app.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------------------------------------------------------------------------\n|\n| The first thing we will do is create a new Laravel application instance\n| which serves as the \"glue\" for all the components of Laravel, and is\n| the IoC container for the system binding all of the various parts.\n|\n*/\n\n$app = new Illuminate\\Foundation\\Application(\n    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)\n);\n\n/*\n|--------------------------------------------------------------------------\n| Bind Important Interfaces\n|--------------------------------------------------------------------------\n|\n| Next, we need to bind some important interfaces into the container so\n| we will be able to resolve them when needed. The kernels serve the\n| incoming requests to this application from both the web and CLI.\n|\n*/\n\n$app->singleton(\n    Illuminate\\Contracts\\Http\\Kernel::class,\n    App\\Http\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Console\\Kernel::class,\n    App\\Console\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Debug\\ExceptionHandler::class,\n    App\\Exceptions\\Handler::class\n);\n\n/*\n|--------------------------------------------------------------------------\n| Return The Application\n|--------------------------------------------------------------------------\n|\n| This script returns the application instance. The instance is given to\n| the calling script so we can separate the building of the instances\n| from the actual running of the application and sending responses.\n|\n*/\n\nreturn $app;\n"
  },
  {
    "path": "docker/php/bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "docker/php/composer.json",
    "content": "{\n    \"name\": \"laravel/laravel\",\n    \"type\": \"project\",\n    \"description\": \"The Laravel Framework.\",\n    \"keywords\": [\n        \"framework\",\n        \"laravel\"\n    ],\n    \"license\": \"MIT\",\n    \"require\": {\n        \"php\": \"^7.3\",\n        \"fideloper/proxy\": \"^4.2\",\n        \"fruitcake/laravel-cors\": \"^2.0\",\n        \"guzzlehttp/guzzle\": \"^7.0.1\",\n        \"laravel/framework\": \"^8.0\",\n        \"laravel/tinker\": \"^2.0\"\n    },\n    \"require-dev\": {\n        \"facade/ignition\": \"^2.3.6\",\n        \"fzaninotto/faker\": \"^1.9.1\",\n        \"mockery/mockery\": \"^1.3.1\",\n        \"nunomaduro/collision\": \"^5.0\",\n        \"phpunit/phpunit\": \"^9.3\"\n    },\n    \"config\": {\n        \"optimize-autoloader\": true,\n        \"preferred-install\": \"dist\",\n        \"sort-packages\": true\n    },\n    \"extra\": {\n        \"laravel\": {\n            \"dont-discover\": []\n        }\n    },\n    \"autoload\": {\n        \"psr-4\": {\n            \"App\\\\\": \"app/\",\n            \"Database\\\\Factories\\\\\": \"database/factories/\",\n            \"Database\\\\Seeders\\\\\": \"database/seeders/\"\n        }\n    },\n    \"autoload-dev\": {\n        \"psr-4\": {\n            \"Tests\\\\\": \"tests/\"\n        }\n    },\n    \"minimum-stability\": \"dev\",\n    \"prefer-stable\": true,\n    \"scripts\": {\n        \"post-autoload-dump\": [\n            \"Illuminate\\\\Foundation\\\\ComposerScripts::postAutoloadDump\",\n            \"@php artisan package:discover --ansi\"\n        ],\n        \"post-root-package-install\": [\n            \"@php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n        ],\n        \"post-create-project-cmd\": [\n            \"@php artisan key:generate --ansi\"\n        ]\n    }\n}\n"
  },
  {
    "path": "docker/php/config/app.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application. This value is used when the\n    | framework needs to place the application's name in a notification or\n    | any other location as required by the application or its packages.\n    |\n    */\n\n    'name' => env('APP_NAME', 'Laravel'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services the application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => (bool) env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    'asset_url' => env('ASSET_URL', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    */\n\n    'timezone' => 'UTC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Fallback Locale\n    |--------------------------------------------------------------------------\n    |\n    | The fallback locale determines the locale to use when the current one\n    | is not available. You may change the value to correspond to any of\n    | the language folders that are provided through your application.\n    |\n    */\n\n    'fallback_locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Faker Locale\n    |--------------------------------------------------------------------------\n    |\n    | This locale will be used by the Faker PHP library when generating fake\n    | data for your database seeds. For example, this will be used to get\n    | localized telephone numbers, street address information and more.\n    |\n    */\n\n    'faker_locale' => 'en_US',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'key' => env('APP_KEY'),\n\n    'cipher' => 'AES-256-CBC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Autoloaded Service Providers\n    |--------------------------------------------------------------------------\n    |\n    | The service providers listed here will be automatically loaded on the\n    | request to your application. Feel free to add your own services to\n    | this array to grant expanded functionality to your applications.\n    |\n    */\n\n    'providers' => [\n\n        /*\n         * Laravel Framework Service Providers...\n         */\n        Illuminate\\Auth\\AuthServiceProvider::class,\n        Illuminate\\Broadcasting\\BroadcastServiceProvider::class,\n        Illuminate\\Bus\\BusServiceProvider::class,\n        Illuminate\\Cache\\CacheServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider::class,\n        Illuminate\\Cookie\\CookieServiceProvider::class,\n        Illuminate\\Database\\DatabaseServiceProvider::class,\n        Illuminate\\Encryption\\EncryptionServiceProvider::class,\n        Illuminate\\Filesystem\\FilesystemServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\FoundationServiceProvider::class,\n        Illuminate\\Hashing\\HashServiceProvider::class,\n        Illuminate\\Mail\\MailServiceProvider::class,\n        Illuminate\\Notifications\\NotificationServiceProvider::class,\n        Illuminate\\Pagination\\PaginationServiceProvider::class,\n        Illuminate\\Pipeline\\PipelineServiceProvider::class,\n        Illuminate\\Queue\\QueueServiceProvider::class,\n        Illuminate\\Redis\\RedisServiceProvider::class,\n        Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider::class,\n        Illuminate\\Session\\SessionServiceProvider::class,\n        Illuminate\\Translation\\TranslationServiceProvider::class,\n        Illuminate\\Validation\\ValidationServiceProvider::class,\n        Illuminate\\View\\ViewServiceProvider::class,\n\n        /*\n         * Package Service Providers...\n         */\n\n        /*\n         * Application Service Providers...\n         */\n        App\\Providers\\AppServiceProvider::class,\n        App\\Providers\\AuthServiceProvider::class,\n        // App\\Providers\\BroadcastServiceProvider::class,\n        App\\Providers\\EventServiceProvider::class,\n        App\\Providers\\RouteServiceProvider::class,\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Class Aliases\n    |--------------------------------------------------------------------------\n    |\n    | This array of class aliases will be registered when this application\n    | is started. However, feel free to register as many as you wish as\n    | the aliases are \"lazy\" loaded so they don't hinder performance.\n    |\n    */\n\n    'aliases' => [\n\n        'App' => Illuminate\\Support\\Facades\\App::class,\n        'Arr' => Illuminate\\Support\\Arr::class,\n        'Artisan' => Illuminate\\Support\\Facades\\Artisan::class,\n        'Auth' => Illuminate\\Support\\Facades\\Auth::class,\n        'Blade' => Illuminate\\Support\\Facades\\Blade::class,\n        'Broadcast' => Illuminate\\Support\\Facades\\Broadcast::class,\n        'Bus' => Illuminate\\Support\\Facades\\Bus::class,\n        'Cache' => Illuminate\\Support\\Facades\\Cache::class,\n        'Config' => Illuminate\\Support\\Facades\\Config::class,\n        'Cookie' => Illuminate\\Support\\Facades\\Cookie::class,\n        'Crypt' => Illuminate\\Support\\Facades\\Crypt::class,\n        'DB' => Illuminate\\Support\\Facades\\DB::class,\n        'Eloquent' => Illuminate\\Database\\Eloquent\\Model::class,\n        'Event' => Illuminate\\Support\\Facades\\Event::class,\n        'File' => Illuminate\\Support\\Facades\\File::class,\n        'Gate' => Illuminate\\Support\\Facades\\Gate::class,\n        'Hash' => Illuminate\\Support\\Facades\\Hash::class,\n        'Http' => Illuminate\\Support\\Facades\\Http::class,\n        'Lang' => Illuminate\\Support\\Facades\\Lang::class,\n        'Log' => Illuminate\\Support\\Facades\\Log::class,\n        'Mail' => Illuminate\\Support\\Facades\\Mail::class,\n        'Notification' => Illuminate\\Support\\Facades\\Notification::class,\n        'Password' => Illuminate\\Support\\Facades\\Password::class,\n        'Queue' => Illuminate\\Support\\Facades\\Queue::class,\n        'Redirect' => Illuminate\\Support\\Facades\\Redirect::class,\n        'Redis' => Illuminate\\Support\\Facades\\Redis::class,\n        'Request' => Illuminate\\Support\\Facades\\Request::class,\n        'Response' => Illuminate\\Support\\Facades\\Response::class,\n        'Route' => Illuminate\\Support\\Facades\\Route::class,\n        'Schema' => Illuminate\\Support\\Facades\\Schema::class,\n        'Session' => Illuminate\\Support\\Facades\\Session::class,\n        'Storage' => Illuminate\\Support\\Facades\\Storage::class,\n        'Str' => Illuminate\\Support\\Str::class,\n        'URL' => Illuminate\\Support\\Facades\\URL::class,\n        'Validator' => Illuminate\\Support\\Facades\\Validator::class,\n        'View' => Illuminate\\Support\\Facades\\View::class,\n\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/auth.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default authentication \"guard\" and password\n    | reset options for your application. You may change these defaults\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => 'web',\n        'passwords' => 'users',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | here which uses session storage and the Eloquent user provider.\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | Supported: \"session\", \"token\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n\n        'api' => [\n            'driver' => 'token',\n            'provider' => 'users',\n            'hash' => false,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | sources which represent each model / table. These sources may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => App\\Models\\User::class,\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | You may specify multiple password reset configurations if you have more\n    | than one user table or model in the application and you want to have\n    | separate password reset settings based on the specific user types.\n    |\n    | The expire time is the number of minutes that the reset token should be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => 'password_resets',\n            'expire' => 60,\n            'throttle' => 60,\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Confirmation Timeout\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define the amount of seconds before a password confirmation\n    | times out and the user is prompted to re-enter their password via the\n    | confirmation screen. By default, the timeout lasts for three hours.\n    |\n    */\n\n    'password_timeout' => 10800,\n\n];\n"
  },
  {
    "path": "docker/php/config/broadcasting.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    | Supported: \"pusher\", \"redis\", \"log\", \"null\"\n    |\n    */\n\n    'default' => env('BROADCAST_DRIVER', 'null'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n\n        'pusher' => [\n            'driver' => 'pusher',\n            'key' => env('PUSHER_APP_KEY'),\n            'secret' => env('PUSHER_APP_SECRET'),\n            'app_id' => env('PUSHER_APP_ID'),\n            'options' => [\n                'cluster' => env('PUSHER_APP_CLUSTER'),\n                'useTLS' => true,\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n        'null' => [\n            'driver' => 'null',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/cache.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    | Supported: \"apc\", \"array\", \"database\", \"file\",\n    |            \"memcached\", \"redis\", \"dynamodb\"\n    |\n    */\n\n    'default' => env('CACHE_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n            'serialize' => false,\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'cache',\n            'connection' => null,\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'cache',\n        ],\n\n        'dynamodb' => [\n            'driver' => 'dynamodb',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n            'table' => env('DYNAMODB_CACHE_TABLE', 'cache'),\n            'endpoint' => env('DYNAMODB_ENDPOINT'),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),\n\n];\n"
  },
  {
    "path": "docker/php/config/cors.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cross-Origin Resource Sharing (CORS) Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure your settings for cross-origin resource sharing\n    | or \"CORS\". This determines what cross-origin operations may execute\n    | in web browsers. You are free to adjust these settings as needed.\n    |\n    | To learn more: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\n    |\n    */\n\n    'paths' => ['api/*'],\n\n    'allowed_methods' => ['*'],\n\n    'allowed_origins' => ['*'],\n\n    'allowed_origins_patterns' => [],\n\n    'allowed_headers' => ['*'],\n\n    'exposed_headers' => [],\n\n    'max_age' => 0,\n\n    'supports_credentials' => false,\n\n];\n"
  },
  {
    "path": "docker/php/config/database.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Database Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify which of the database connections below you wish\n    | to use as your default connection for all database work. Of course\n    | you may use many connections at once using the Database library.\n    |\n    */\n\n    'default' => env('DB_CONNECTION', 'mysql'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Database Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here are each of the database connections setup for your application.\n    | Of course, examples of configuring each database platform that is\n    | supported by Laravel is shown below to make development simple.\n    |\n    |\n    | All database work in Laravel is done through the PHP PDO facilities\n    | so make sure you have the driver for your particular database of\n    | choice installed on your machine before you begin development.\n    |\n    */\n\n    'connections' => [\n\n        'sqlite' => [\n            'driver' => 'sqlite',\n            'url' => env('DATABASE_URL'),\n            'database' => env('DB_DATABASE', database_path('database.sqlite')),\n            'prefix' => '',\n            'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),\n        ],\n\n        'mysql' => [\n            'driver' => 'mysql',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '3306'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'unix_socket' => env('DB_SOCKET', ''),\n            'charset' => 'utf8mb4',\n            'collation' => 'utf8mb4_unicode_ci',\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'strict' => true,\n            'engine' => null,\n            'options' => extension_loaded('pdo_mysql') ? array_filter([\n                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),\n            ]) : [],\n        ],\n\n        'pgsql' => [\n            'driver' => 'pgsql',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', '127.0.0.1'),\n            'port' => env('DB_PORT', '5432'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'prefix_indexes' => true,\n            'schema' => 'public',\n            'sslmode' => 'prefer',\n        ],\n\n        'sqlsrv' => [\n            'driver' => 'sqlsrv',\n            'url' => env('DATABASE_URL'),\n            'host' => env('DB_HOST', 'localhost'),\n            'port' => env('DB_PORT', '1433'),\n            'database' => env('DB_DATABASE', 'forge'),\n            'username' => env('DB_USERNAME', 'forge'),\n            'password' => env('DB_PASSWORD', ''),\n            'charset' => 'utf8',\n            'prefix' => '',\n            'prefix_indexes' => true,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Migration Repository Table\n    |--------------------------------------------------------------------------\n    |\n    | This table keeps track of all the migrations that have already run for\n    | your application. Using this information, we can determine which of\n    | the migrations on disk haven't actually been run in the database.\n    |\n    */\n\n    'migrations' => 'migrations',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Redis Databases\n    |--------------------------------------------------------------------------\n    |\n    | Redis is an open source, fast, and advanced key-value store that also\n    | provides a richer body of commands than a typical key-value system\n    | such as APC or Memcached. Laravel makes it easy to dig right in.\n    |\n    */\n\n    'redis' => [\n\n        'client' => env('REDIS_CLIENT', 'phpredis'),\n\n        'options' => [\n            'cluster' => env('REDIS_CLUSTER', 'redis'),\n            'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),\n        ],\n\n        'default' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_DB', '0'),\n        ],\n\n        'cache' => [\n            'url' => env('REDIS_URL'),\n            'host' => env('REDIS_HOST', '127.0.0.1'),\n            'password' => env('REDIS_PASSWORD', null),\n            'port' => env('REDIS_PORT', '6379'),\n            'database' => env('REDIS_CACHE_DB', '1'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/filesystems.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application. Just store away!\n    |\n    */\n\n    'default' => env('FILESYSTEM_DRIVER', 'local'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cloud Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Many applications store files both locally and in the cloud. For this\n    | reason, you may specify a default \"cloud\" driver here. This driver\n    | will be bound as the Cloud disk implementation in the container.\n    |\n    */\n\n    'cloud' => env('FILESYSTEM_CLOUD', 's3'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"sftp\", \"s3\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => storage_path('app/public'),\n            'url' => env('APP_URL').'/storage',\n            'visibility' => 'public',\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'region' => env('AWS_DEFAULT_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n            'url' => env('AWS_URL'),\n            'endpoint' => env('AWS_ENDPOINT'),\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Symbolic Links\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the symbolic links that will be created when the\n    | `storage:link` Artisan command is executed. The array keys should be\n    | the locations of the links and the values should be their targets.\n    |\n    */\n\n    'links' => [\n        public_path('storage') => storage_path('app/public'),\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/hashing.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Hash Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default hash driver that will be used to hash\n    | passwords for your application. By default, the bcrypt algorithm is\n    | used; however, you remain free to modify this option if you wish.\n    |\n    | Supported: \"bcrypt\", \"argon\", \"argon2id\"\n    |\n    */\n\n    'driver' => 'bcrypt',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Bcrypt Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Bcrypt algorithm. This will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'bcrypt' => [\n        'rounds' => env('BCRYPT_ROUNDS', 10),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Argon Options\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the configuration options that should be used when\n    | passwords are hashed using the Argon algorithm. These will allow you\n    | to control the amount of time it takes to hash the given password.\n    |\n    */\n\n    'argon' => [\n        'memory' => 1024,\n        'threads' => 2,\n        'time' => 2,\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/logging.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Monolog\\Handler\\NullHandler;\nuse Monolog\\Handler\\StreamHandler;\nuse Monolog\\Handler\\SyslogUdpHandler;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Log Channel\n    |--------------------------------------------------------------------------\n    |\n    | This option defines the default log channel that gets used when writing\n    | messages to the logs. The name specified in this option should match\n    | one of the channels defined in the \"channels\" configuration array.\n    |\n    */\n\n    'default' => env('LOG_CHANNEL', 'stack'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Log Channels\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log channels for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Drivers: \"single\", \"daily\", \"slack\", \"syslog\",\n    |                    \"errorlog\", \"monolog\",\n    |                    \"custom\", \"stack\"\n    |\n    */\n\n    'channels' => [\n        'stack' => [\n            'driver' => 'stack',\n            'channels' => ['single'],\n            'ignore_exceptions' => false,\n        ],\n\n        'single' => [\n            'driver' => 'single',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n        ],\n\n        'daily' => [\n            'driver' => 'daily',\n            'path' => storage_path('logs/laravel.log'),\n            'level' => 'debug',\n            'days' => 14,\n        ],\n\n        'slack' => [\n            'driver' => 'slack',\n            'url' => env('LOG_SLACK_WEBHOOK_URL'),\n            'username' => 'Laravel Log',\n            'emoji' => ':boom:',\n            'level' => 'critical',\n        ],\n\n        'papertrail' => [\n            'driver' => 'monolog',\n            'level' => 'debug',\n            'handler' => SyslogUdpHandler::class,\n            'handler_with' => [\n                'host' => env('PAPERTRAIL_URL'),\n                'port' => env('PAPERTRAIL_PORT'),\n            ],\n        ],\n\n        'stderr' => [\n            'driver' => 'monolog',\n            'handler' => StreamHandler::class,\n            'formatter' => env('LOG_STDERR_FORMATTER'),\n            'with' => [\n                'stream' => 'php://stderr',\n            ],\n        ],\n\n        'syslog' => [\n            'driver' => 'syslog',\n            'level' => 'debug',\n        ],\n\n        'errorlog' => [\n            'driver' => 'errorlog',\n            'level' => 'debug',\n        ],\n\n        'null' => [\n            'driver' => 'monolog',\n            'handler' => NullHandler::class,\n        ],\n\n        'emergency' => [\n            'path' => storage_path('logs/laravel.log'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/mail.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Mailer\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default mailer that is used to send any email\n    | messages sent by your application. Alternative mailers may be setup\n    | and used as needed; however, this mailer will be used by default.\n    |\n    */\n\n    'default' => env('MAIL_MAILER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mailer Configurations\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure all of the mailers used by your application plus\n    | their respective settings. Several examples have been configured for\n    | you and you are free to add your own as your application requires.\n    |\n    | Laravel supports a variety of mail \"transport\" drivers to be used while\n    | sending an e-mail. You will specify which one you are using for your\n    | mailers below. You are free to add additional mailers as required.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"ses\",\n    |            \"postmark\", \"log\", \"array\"\n    |\n    */\n\n    'mailers' => [\n        'smtp' => [\n            'transport' => 'smtp',\n            'host' => env('MAIL_HOST', 'smtp.mailgun.org'),\n            'port' => env('MAIL_PORT', 587),\n            'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n            'username' => env('MAIL_USERNAME'),\n            'password' => env('MAIL_PASSWORD'),\n            'timeout' => null,\n            'auth_mode' => null,\n        ],\n\n        'ses' => [\n            'transport' => 'ses',\n        ],\n\n        'mailgun' => [\n            'transport' => 'mailgun',\n        ],\n\n        'postmark' => [\n            'transport' => 'postmark',\n        ],\n\n        'sendmail' => [\n            'transport' => 'sendmail',\n            'path' => '/usr/sbin/sendmail -bs',\n        ],\n\n        'log' => [\n            'transport' => 'log',\n            'channel' => env('MAIL_LOG_CHANNEL'),\n        ],\n\n        'array' => [\n            'transport' => 'array',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),\n        'name' => env('MAIL_FROM_NAME', 'Example'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Mail Settings\n    |--------------------------------------------------------------------------\n    |\n    | If you are using Markdown based email rendering, you may configure your\n    | theme and component paths here, allowing you to customize the design\n    | of the emails. Or, you may simply stick with the Laravel defaults!\n    |\n    */\n\n    'markdown' => [\n        'theme' => 'default',\n\n        'paths' => [\n            resource_path('views/vendor/mail'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/queue.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Connection Name\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue API supports an assortment of back-ends via a single\n    | API, giving you convenient access to each back-end using the same\n    | syntax for every one. Here you may define a default connection.\n    |\n    */\n\n    'default' => env('QUEUE_CONNECTION', 'sync'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection information for each server that\n    | is used by your application. A default configuration has been added\n    | for each back-end shipped with Laravel. You are free to add more.\n    |\n    | Drivers: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'jobs',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => 'localhost',\n            'queue' => 'default',\n            'retry_after' => 90,\n            'block_for' => 0,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => env('AWS_ACCESS_KEY_ID'),\n            'secret' => env('AWS_SECRET_ACCESS_KEY'),\n            'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),\n            'queue' => env('SQS_QUEUE', 'your-queue-name'),\n            'suffix' => env('SQS_SUFFIX'),\n            'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => env('REDIS_QUEUE', 'default'),\n            'retry_after' => 90,\n            'block_for' => null,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control which database and table are used to store the jobs that\n    | have failed. You may change them to any database / table you wish.\n    |\n    */\n\n    'failed' => [\n        'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'),\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/services.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Mailgun, Postmark, AWS and more. This file provides the de facto\n    | location for this type of information, allowing packages to have\n    | a conventional file to locate the various service credentials.\n    |\n    */\n\n    'mailgun' => [\n        'domain' => env('MAILGUN_DOMAIN'),\n        'secret' => env('MAILGUN_SECRET'),\n        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),\n    ],\n\n    'postmark' => [\n        'token' => env('POSTMARK_TOKEN'),\n    ],\n\n    'ses' => [\n        'key' => env('AWS_ACCESS_KEY_ID'),\n        'secret' => env('AWS_SECRET_ACCESS_KEY'),\n        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),\n    ],\n\n];\n"
  },
  {
    "path": "docker/php/config/session.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Support\\Str;\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default session \"driver\" that will be used on\n    | requests. By default, we will use the lightweight native driver but\n    | you may specify any of the other wonderful drivers provided here.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"dynamodb\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to immediately expire on the browser closing, set that option.\n    |\n    */\n\n    'lifetime' => env('SESSION_LIFETIME', 120),\n\n    'expire_on_close' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it is stored. All encryption will be run\n    | automatically by Laravel and you can use the Session like normal.\n    |\n    */\n\n    'encrypt' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When using the native session driver, we need a location where session\n    | files may be stored. A default has been set for you but a different\n    | location may be specified. This is only needed for file sessions.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => env('SESSION_CONNECTION', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table we\n    | should use to manage the sessions. Of course, a sensible default is\n    | provided for you; however, you are free to change this as needed.\n    |\n    */\n\n    'table' => 'sessions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | While using one of the framework's cache driven session backends you may\n    | list a cache store that should be used for these sessions. This value\n    | must match with one of the application's configured cache \"stores\".\n    |\n    | Affects: \"apc\", \"dynamodb\", \"memcached\", \"redis\"\n    |\n    */\n\n    'store' => env('SESSION_STORE', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the cookie used to identify a session\n    | instance by ID. The name specified here will get used every time a\n    | new session cookie is created by the framework for every driver.\n    |\n    */\n\n    'cookie' => env(\n        'SESSION_COOKIE',\n        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'\n    ),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application but you are free to change this when necessary.\n    |\n    */\n\n    'path' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the domain of the cookie used to identify a session\n    | in your application. This will determine which domains the cookie is\n    | available to in your application. A sensible default has been set.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you if it can not be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. You are free to modify this option if needed.\n    |\n    */\n\n    'http_only' => true,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Same-Site Cookies\n    |--------------------------------------------------------------------------\n    |\n    | This option determines how your cookies behave when cross-site requests\n    | take place, and can be used to mitigate CSRF attacks. By default, we\n    | will set this value to \"lax\" since this is a secure default value.\n    |\n    | Supported: \"lax\", \"strict\", \"none\", null\n    |\n    */\n\n    'same_site' => 'lax',\n\n];\n"
  },
  {
    "path": "docker/php/config/view.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        resource_path('views'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => env(\n        'VIEW_COMPILED_PATH',\n        realpath(storage_path('framework/views'))\n    ),\n\n];\n"
  },
  {
    "path": "docker/php/database/.gitignore",
    "content": "*.sqlite\n*.sqlite-journal\n"
  },
  {
    "path": "docker/php/database/factories/UserFactory.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Database\\Factories;\n\nuse App\\Models\\User;\nuse Illuminate\\Database\\Eloquent\\Factories\\Factory;\nuse Illuminate\\Support\\Str;\n\nclass UserFactory extends Factory\n{\n    /**\n     * The name of the factory's corresponding model.\n     *\n     * @var string\n     */\n    protected $model = User::class;\n\n    /**\n     * Define the model's default state.\n     *\n     * @return array\n     */\n    public function definition()\n    {\n        return [\n            'name' => $this->faker->name,\n            'email' => $this->faker->unique()->safeEmail,\n            'email_verified_at' => now(),\n            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password\n            'remember_token' => Str::random(10),\n        ];\n    }\n}\n"
  },
  {
    "path": "docker/php/database/migrations/2014_10_12_000000_create_users_table.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->id();\n            $table->string('name');\n            $table->string('email')->unique();\n            $table->timestamp('email_verified_at')->nullable();\n            $table->string('password');\n            $table->rememberToken();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('users');\n    }\n}\n"
  },
  {
    "path": "docker/php/database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_resets', function (Blueprint $table) {\n            $table->string('email')->index();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_resets');\n    }\n}\n"
  },
  {
    "path": "docker/php/database/migrations/2019_08_19_000000_create_failed_jobs_table.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nclass CreateFailedJobsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('failed_jobs', function (Blueprint $table) {\n            $table->id();\n            $table->string('uuid')->unique();\n            $table->text('connection');\n            $table->text('queue');\n            $table->longText('payload');\n            $table->longText('exception');\n            $table->timestamp('failed_at')->useCurrent();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('failed_jobs');\n    }\n}\n"
  },
  {
    "path": "docker/php/database/seeders/DatabaseSeeder.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Seed the application's database.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        // User::factory(10)->create();\n    }\n}\n"
  },
  {
    "path": "docker/php/package.json",
    "content": "{\n    \"private\": true,\n    \"scripts\": {\n        \"dev\": \"npm run development\",\n        \"development\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\",\n        \"watch\": \"npm run development -- --watch\",\n        \"watch-poll\": \"npm run watch -- --watch-poll\",\n        \"hot\": \"cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js\",\n        \"prod\": \"npm run production\",\n        \"production\": \"cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\"\n    },\n    \"devDependencies\": {\n        \"axios\": \"^0.19\",\n        \"cross-env\": \"^7.0\",\n        \"laravel-mix\": \"^5.0.1\",\n        \"lodash\": \"^4.17.19\",\n        \"resolve-url-loader\": \"^3.1.0\"\n    }\n}\n"
  },
  {
    "path": "docker/php/phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<phpunit xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n         xsi:noNamespaceSchemaLocation=\"./vendor/phpunit/phpunit/phpunit.xsd\"\n         bootstrap=\"vendor/autoload.php\"\n         colors=\"true\"\n>\n    <testsuites>\n        <testsuite name=\"Unit\">\n            <directory suffix=\"Test.php\">./tests/Unit</directory>\n        </testsuite>\n        <testsuite name=\"Feature\">\n            <directory suffix=\"Test.php\">./tests/Feature</directory>\n        </testsuite>\n    </testsuites>\n    <coverage processUncoveredFiles=\"true\">\n        <include>\n            <directory suffix=\".php\">./app</directory>\n        </include>\n    </coverage>\n    <php>\n        <server name=\"APP_ENV\" value=\"testing\"/>\n        <server name=\"BCRYPT_ROUNDS\" value=\"4\"/>\n        <server name=\"CACHE_DRIVER\" value=\"array\"/>\n        <!-- <server name=\"DB_CONNECTION\" value=\"sqlite\"/> -->\n        <!-- <server name=\"DB_DATABASE\" value=\":memory:\"/> -->\n        <server name=\"MAIL_MAILER\" value=\"array\"/>\n        <server name=\"QUEUE_CONNECTION\" value=\"sync\"/>\n        <server name=\"SESSION_DRIVER\" value=\"array\"/>\n        <server name=\"TELESCOPE_ENABLED\" value=\"false\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "docker/php/public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews -Indexes\n    </IfModule>\n\n    RewriteEngine On\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_URI} (.+)/$\n    RewriteRule ^ %1 [L,R=301]\n\n    # Send Requests To Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n</IfModule>\n"
  },
  {
    "path": "docker/php/public/css/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n    --text: #E4E5E7;\n    --background: #000;\n    --brand: 4, 198, 194;\n    --headline: #FFF;\n  }\n\n  * {\n    margin: 0;\n    padding: 0;\n  }\n\n  html, body {\n    min-height: 100vh;\n  }\n\n  body {\n    font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n    font-size: 15px;\n    line-height: 24px;\n    color: var(--text);\n    text-align: center;\n    background-image: url(../images/pattern-tl.svg), url(../images/pattern-br.svg);\n    background-position: top left, bottom right;\n    background-repeat: no-repeat;\n    background-color: var(--background);\n  }\n\n  .container {\n    display: flex;\n    flex-direction: column;\n    min-height: calc(100vh - 80px - 60px);\n    padding: 80px 60px 60px;\n  }\n\n  section {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    flex-grow: 1;\n    padding: 60px 0;\n  }\n\n  section .language-icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 80px;\n    height: 80px;\n    border-radius: 100%;\n    border: 1px solid rgba(var(--brand), .5);\n    background: rgba(var(--brand), .15);\n  }\n\n  section h1 {\n    color: var(--headline);\n    font-size: 18px;\n    font-weight: 600;\n    padding: 40px 0 8px;\n  }\n\n  section p {\n    padding-top: 12px;\n  }\n\n  section code {\n    font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n    font-size: 14px;\n    padding: 4px 6px;\n    margin: 0 2px;\n    border-radius: 3px;\n    background: rgba(255, 255, 255, .15);\n  }\n\n  section a {\n    color: rgb(var(--brand));\n  }\n"
  },
  {
    "path": "docker/php/public/index.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Contracts\\Http\\Kernel;\nuse Illuminate\\Http\\Request;\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Check If Application Is Under Maintenance\n|--------------------------------------------------------------------------\n|\n| If the application is maintenance / demo mode via the \"down\" command we\n| will require this file so that any prerendered template can be shown\n| instead of starting the framework, which could cause an exception.\n|\n*/\n\nif (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {\n    require __DIR__.'/../storage/framework/maintenance.php';\n}\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| this application. We just need to utilize it! We'll simply require it\n| into the script here so we don't need to manually load our classes.\n|\n*/\n\nrequire __DIR__.'/../vendor/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Application\n|--------------------------------------------------------------------------\n|\n| Once we have the application, we can handle the incoming request using\n| the application's HTTP kernel. Then, we will send the response back\n| to this client's browser, allowing them to enjoy our application.\n|\n*/\n\n$app = require_once __DIR__.'/../bootstrap/app.php';\n\n$kernel = $app->make(Kernel::class);\n\n$response = tap($kernel->handle(\n    $request = Request::capture()\n))->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "docker/php/public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "docker/php/public/web.config",
    "content": "<!--\n    Rewrites requires Microsoft URL Rewrite Module for IIS\n    Download: https://www.microsoft.com/en-us/download/details.aspx?id=47337\n    Debug Help: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules\n-->\n<configuration>\n  <system.webServer>\n    <rewrite>\n      <rules>\n        <rule name=\"Imported Rule 1\" stopProcessing=\"true\">\n          <match url=\"^(.*)/$\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Redirect\" redirectType=\"Permanent\" url=\"/{R:1}\" />\n        </rule>\n        <rule name=\"Imported Rule 2\" stopProcessing=\"true\">\n          <match url=\"^\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"index.php\" />\n        </rule>\n      </rules>\n    </rewrite>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "docker/php/resources/css/app.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n"
  },
  {
    "path": "docker/php/resources/js/app.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nrequire('./bootstrap');\n"
  },
  {
    "path": "docker/php/resources/js/bootstrap.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nwindow._ = require('lodash');\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = require('axios');\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo';\n\n// window.Pusher = require('pusher-js');\n\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: process.env.MIX_PUSHER_APP_KEY,\n//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,\n//     forceTLS: true\n// });\n"
  },
  {
    "path": "docker/php/resources/lang/en/auth.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed' => 'These credentials do not match our records.',\n    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',\n\n];\n"
  },
  {
    "path": "docker/php/resources/lang/en/pagination.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Previous',\n    'next' => 'Next &raquo;',\n\n];\n"
  },
  {
    "path": "docker/php/resources/lang/en/passwords.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'reset' => 'Your password has been reset!',\n    'sent' => 'We have emailed your password reset link!',\n    'throttled' => 'Please wait before retrying.',\n    'token' => 'This password reset token is invalid.',\n    'user' => \"We can't find a user with that email address.\",\n\n];\n"
  },
  {
    "path": "docker/php/resources/lang/en/validation.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted' => 'The :attribute must be accepted.',\n    'active_url' => 'The :attribute is not a valid URL.',\n    'after' => 'The :attribute must be a date after :date.',\n    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',\n    'alpha' => 'The :attribute may only contain letters.',\n    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',\n    'alpha_num' => 'The :attribute may only contain letters and numbers.',\n    'array' => 'The :attribute must be an array.',\n    'before' => 'The :attribute must be a date before :date.',\n    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',\n    'between' => [\n        'numeric' => 'The :attribute must be between :min and :max.',\n        'file' => 'The :attribute must be between :min and :max kilobytes.',\n        'string' => 'The :attribute must be between :min and :max characters.',\n        'array' => 'The :attribute must have between :min and :max items.',\n    ],\n    'boolean' => 'The :attribute field must be true or false.',\n    'confirmed' => 'The :attribute confirmation does not match.',\n    'date' => 'The :attribute is not a valid date.',\n    'date_equals' => 'The :attribute must be a date equal to :date.',\n    'date_format' => 'The :attribute does not match the format :format.',\n    'different' => 'The :attribute and :other must be different.',\n    'digits' => 'The :attribute must be :digits digits.',\n    'digits_between' => 'The :attribute must be between :min and :max digits.',\n    'dimensions' => 'The :attribute has invalid image dimensions.',\n    'distinct' => 'The :attribute field has a duplicate value.',\n    'email' => 'The :attribute must be a valid email address.',\n    'ends_with' => 'The :attribute must end with one of the following: :values.',\n    'exists' => 'The selected :attribute is invalid.',\n    'file' => 'The :attribute must be a file.',\n    'filled' => 'The :attribute field must have a value.',\n    'gt' => [\n        'numeric' => 'The :attribute must be greater than :value.',\n        'file' => 'The :attribute must be greater than :value kilobytes.',\n        'string' => 'The :attribute must be greater than :value characters.',\n        'array' => 'The :attribute must have more than :value items.',\n    ],\n    'gte' => [\n        'numeric' => 'The :attribute must be greater than or equal :value.',\n        'file' => 'The :attribute must be greater than or equal :value kilobytes.',\n        'string' => 'The :attribute must be greater than or equal :value characters.',\n        'array' => 'The :attribute must have :value items or more.',\n    ],\n    'image' => 'The :attribute must be an image.',\n    'in' => 'The selected :attribute is invalid.',\n    'in_array' => 'The :attribute field does not exist in :other.',\n    'integer' => 'The :attribute must be an integer.',\n    'ip' => 'The :attribute must be a valid IP address.',\n    'ipv4' => 'The :attribute must be a valid IPv4 address.',\n    'ipv6' => 'The :attribute must be a valid IPv6 address.',\n    'json' => 'The :attribute must be a valid JSON string.',\n    'lt' => [\n        'numeric' => 'The :attribute must be less than :value.',\n        'file' => 'The :attribute must be less than :value kilobytes.',\n        'string' => 'The :attribute must be less than :value characters.',\n        'array' => 'The :attribute must have less than :value items.',\n    ],\n    'lte' => [\n        'numeric' => 'The :attribute must be less than or equal :value.',\n        'file' => 'The :attribute must be less than or equal :value kilobytes.',\n        'string' => 'The :attribute must be less than or equal :value characters.',\n        'array' => 'The :attribute must not have more than :value items.',\n    ],\n    'max' => [\n        'numeric' => 'The :attribute may not be greater than :max.',\n        'file' => 'The :attribute may not be greater than :max kilobytes.',\n        'string' => 'The :attribute may not be greater than :max characters.',\n        'array' => 'The :attribute may not have more than :max items.',\n    ],\n    'mimes' => 'The :attribute must be a file of type: :values.',\n    'mimetypes' => 'The :attribute must be a file of type: :values.',\n    'min' => [\n        'numeric' => 'The :attribute must be at least :min.',\n        'file' => 'The :attribute must be at least :min kilobytes.',\n        'string' => 'The :attribute must be at least :min characters.',\n        'array' => 'The :attribute must have at least :min items.',\n    ],\n    'not_in' => 'The selected :attribute is invalid.',\n    'not_regex' => 'The :attribute format is invalid.',\n    'numeric' => 'The :attribute must be a number.',\n    'password' => 'The password is incorrect.',\n    'present' => 'The :attribute field must be present.',\n    'regex' => 'The :attribute format is invalid.',\n    'required' => 'The :attribute field is required.',\n    'required_if' => 'The :attribute field is required when :other is :value.',\n    'required_unless' => 'The :attribute field is required unless :other is in :values.',\n    'required_with' => 'The :attribute field is required when :values is present.',\n    'required_with_all' => 'The :attribute field is required when :values are present.',\n    'required_without' => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same' => 'The :attribute and :other must match.',\n    'size' => [\n        'numeric' => 'The :attribute must be :size.',\n        'file' => 'The :attribute must be :size kilobytes.',\n        'string' => 'The :attribute must be :size characters.',\n        'array' => 'The :attribute must contain :size items.',\n    ],\n    'starts_with' => 'The :attribute must start with one of the following: :values.',\n    'string' => 'The :attribute must be a string.',\n    'timezone' => 'The :attribute must be a valid zone.',\n    'unique' => 'The :attribute has already been taken.',\n    'uploaded' => 'The :attribute failed to upload.',\n    'url' => 'The :attribute format is invalid.',\n    'uuid' => 'The :attribute must be a valid UUID.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap our attribute placeholder\n    | with something more reader friendly such as \"E-Mail Address\" instead\n    | of \"email\". This simply helps us make our message more expressive.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "docker/php/resources/views/welcome.blade.php",
    "content": "<!DOCTYPE html>\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n<html lang=\"{{ str_replace('_', '-', app()->getLocale()) }}\">\n    <head>\n        <meta charset=\"utf-8\">\n        <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n        <title>Waypoint Laravel Example</title>\n        <link rel=\"stylesheet\" type=\"text/css\" href=\"{{ asset('css/main.css') }}\" />\n    </head>\n    <body>\n        <div class=\"container\">\n            <header>\n                <a href=\"https://waypointproject.io\" class=\"logo\">\n                <img src=\"{{ asset('images/logo.svg') }}\" alt=\"Logo\" />\n                </a>\n            </header>\n            <section class=\"content\">\n                <div class=\"language-icon\">\n                <img src=\"{{ asset('images/language.svg') }}\" alt=\"PHP Icon\" width=\"65px\" />\n                </div>\n                <h1>This Laravel app was deployed with Waypoint.</h1>\n                <p>\n                    Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n                </p>\n                <p>\n                Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n                </p>\n            </section>\n            <footer>\n                <a href=\"https://hashicorp.com\" class=\"hashi\">\n                <img src=\"{{ asset('images/hashi.svg') }}\" alt=\"HashiCorp\" />\n                </a>\n            </footer>\n        </div>\n    </body>\n</html>\n"
  },
  {
    "path": "docker/php/routes/api.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\n\n/*\n|--------------------------------------------------------------------------\n| API Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register API routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| is assigned the \"api\" middleware group. Enjoy building your API!\n|\n*/\n\nRoute::middleware('auth:api')->get('/user', function (Request $request) {\n    return $request->user();\n});\n"
  },
  {
    "path": "docker/php/routes/channels.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Support\\Facades\\Broadcast;\n\n/*\n|--------------------------------------------------------------------------\n| Broadcast Channels\n|--------------------------------------------------------------------------\n|\n| Here you may register all of the event broadcasting channels that your\n| application supports. The given channel authorization callbacks are\n| used to check if an authenticated user can listen to the channel.\n|\n*/\n\nBroadcast::channel('App.Models.User.{id}', function ($user, $id) {\n    return (int) $user->id === (int) $id;\n});\n"
  },
  {
    "path": "docker/php/routes/console.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Foundation\\Inspiring;\nuse Illuminate\\Support\\Facades\\Artisan;\n\n/*\n|--------------------------------------------------------------------------\n| Console Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of your Closure based console\n| commands. Each Closure is bound to a command instance allowing a\n| simple approach to interacting with each command's IO methods.\n|\n*/\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n})->purpose('Display an inspiring quote');\n"
  },
  {
    "path": "docker/php/routes/web.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nuse Illuminate\\Support\\Facades\\Route;\n\n/*\n|--------------------------------------------------------------------------\n| Web Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register web routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| contains the \"web\" middleware group. Now create something great!\n|\n*/\n\nRoute::get('/', function () {\n    return view('welcome');\n});\n"
  },
  {
    "path": "docker/php/server.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n\n$uri = urldecode(\n    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)\n);\n\n// This file allows us to emulate Apache's \"mod_rewrite\" functionality from the\n// built-in PHP web server. This provides a convenient way to test a Laravel\n// application without having installed a \"real\" web server software here.\nif ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {\n    return false;\n}\n\nrequire_once __DIR__.'/public/index.php';\n"
  },
  {
    "path": "docker/php/storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "docker/php/storage/framework/.gitignore",
    "content": "compiled.php\nconfig.php\ndown\nevents.scanned.php\nmaintenance.php\nroutes.php\nroutes.scanned.php\nschedule-*\nservices.json\n"
  },
  {
    "path": "docker/php/storage/framework/cache/.gitignore",
    "content": "*\n!data/\n!.gitignore\n"
  },
  {
    "path": "docker/php/storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "docker/php/storage/framework/testing/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "docker/php/storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "docker/php/storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "docker/php/tests/CreatesApplication.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     *\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "docker/php/tests/Feature/ExampleTest.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Tests\\Feature;\n\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n    }\n}\n"
  },
  {
    "path": "docker/php/tests/TestCase.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    use CreatesApplication;\n}\n"
  },
  {
    "path": "docker/php/tests/Unit/ExampleTest.php",
    "content": "<?php\n// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\n\nnamespace Tests\\Unit;\n\nuse PHPUnit\\Framework\\TestCase;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "docker/php/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-php\"\n\napp \"example-php\" {\n  labels = {\n    \"service\" = \"example-php\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "docker/php/webpack.mix.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst mix = require('laravel-mix');\n\n/*\n |--------------------------------------------------------------------------\n | Mix Asset Management\n |--------------------------------------------------------------------------\n |\n | Mix provides a clean, fluent API for defining some Webpack build steps\n | for your Laravel applications. By default, we are compiling the CSS\n | file for the application as well as bundling up all the JS files.\n |\n */\n\nmix.js('resources/js/app.js', 'public/js')\n    .postCss('resources/css/app.css', 'public/css', [\n        //\n    ]);\n"
  },
  {
    "path": "docker/python/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM ubuntu:20.04\n\nENV LC_ALL=C.UTF-8\nENV LANG=C.UTF-8\n\nRUN apt-get update -y && apt-get install python3-pip -y\n\nADD requirements.txt /app/\nWORKDIR /app\nRUN /bin/bash -c \"pip3 install --no-cache-dir -r requirements.txt\"\n\nADD /app/ /app/\n\nEXPOSE 8080\n\nCMD [\"gunicorn\", \"-b\", \"0.0.0.0:8080\", \"wsgi\", \"-k\", \"gevent\"]\n"
  },
  {
    "path": "docker/python/README.md",
    "content": "# Getting Started with Waypoint and Flask\n\n1. Run `waypoint init` in this example directory with `waypoint.hcl`.\n1. Run `waypoint up` to build and deploy the application.\n\nFor more information on Flask, see [https://palletsprojects.com/p/flask/](https://palletsprojects.com/p/flask/).\n"
  },
  {
    "path": "docker/python/app/app.py",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nfrom flask import Flask, render_template\napplication = Flask(__name__)\n\n@application.route(\"/\")\ndef index():\n    return (render_template('index.html'))\n\nif __name__ == \"__main__\":\n    application.run(host='0.0.0.0')\n"
  },
  {
    "path": "docker/python/app/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/python/app/templates/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n  <head>\n<title>Waypoint Flask Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Flask Icon\" />\n        </div>\n        <h1>This Flask app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n\n"
  },
  {
    "path": "docker/python/app/wsgi.py",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nfrom app import application\n\nif __name__ == \"__main__\":\n    application.run()\n"
  },
  {
    "path": "docker/python/requirements.txt",
    "content": "gevent\ngunicorn\nflask\n"
  },
  {
    "path": "docker/python/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-python\"\n\napp \"example-python\" {\n  labels = {\n    \"service\" = \"example-python\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"docker\" {}\n  }\n\n  deploy {\n    use \"docker\" {\n      service_port = 8080\n    }\n  }\n}\n"
  },
  {
    "path": "docker/reactjs/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.waypoint"
  },
  {
    "path": "docker/reactjs/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# build environment\nFROM node:13.12.0-alpine as build\nWORKDIR /app\nENV PATH /app/node_modules/.bin:$PATH\nCOPY package.json ./\nCOPY package-lock.json ./\nRUN npm ci --silent\nRUN npm install react-scripts@3.4.1 -g --silent\nCOPY . ./\nRUN npm run build\n\n# production environment\nFROM nginx:stable-alpine\nCOPY nginx/default.conf /etc/nginx/conf.d/\nCOPY --from=build /app/build /usr/share/nginx/html\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n"
  },
  {
    "path": "docker/reactjs/README.md",
    "content": "# Waypoint React.js Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|JavaScript|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n"
  },
  {
    "path": "docker/reactjs/nginx/default.conf",
    "content": "server {\n\n  listen 80;\n\n  sendfile on;\n\n  default_type application/octet-stream;\n\n\n  gzip on;\n  gzip_http_version 1.1;\n  gzip_disable      \"MSIE [1-6]\\.\";\n  gzip_min_length   1100;\n  gzip_vary         on;\n  gzip_proxied      expired no-cache no-store private auth;\n  gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;\n  gzip_comp_level   9;\n\n\n  root /usr/share/nginx/html;\n\n\n  location / {\n    try_files $uri $uri/ /index.html;                \n    proxy_read_timeout 300s;\n    proxy_connect_timeout 75s;\n  }\n  \n}\n\n"
  },
  {
    "path": "docker/reactjs/package.json",
    "content": "{\n  \"name\": \"reactjs\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"^4.2.4\",\n    \"@testing-library/react\": \"^9.5.0\",\n    \"@testing-library/user-event\": \"^7.2.1\",\n    \"react\": \"^16.13.1\",\n    \"react-dom\": \"^16.13.1\",\n    \"react-scripts\": \"3.4.3\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "docker/reactjs/public/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Waypoint React Example</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "docker/reactjs/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "docker/reactjs/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "docker/reactjs/src/App.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(pattern-tl.svg), url(pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "docker/reactjs/src/App.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport logo from './logo.svg';\nimport language from './language.svg';\nimport hashi from './hashi.svg';\nimport './App.css';\n\nfunction App() {\n  return ( \n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src={logo} />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src={language} />\n        </div>\n        <h1>This React app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src={hashi} />\n        </a>\n      </footer>\n    </div>\n  );\n}\n\nexport default App;\n"
  },
  {
    "path": "docker/reactjs/src/App.test.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport { render } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () => {\n  const { getByText } = render(<App />);\n  const linkElement = getByText(/learn react/i);\n  expect(linkElement).toBeInTheDocument();\n});\n"
  },
  {
    "path": "docker/reactjs/src/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "docker/reactjs/src/serviceWorker.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' },\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n"
  },
  {
    "path": "docker/reactjs/src/setupTests.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom/extend-expect';\n"
  },
  {
    "path": "docker/reactjs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# The name of your project. A project typically maps 1:1 to a VCS repository.\n# This name must be unique for your Waypoint server. If you're running in\n# local mode, this must be unique to your machine.\nproject = \"example-reactjs\"\n\n# Labels can be specified for organizational purposes.\n# labels = { \"foo\" = \"bar\" }\n\n# An application to deploy.\napp \"example-reactjs\" {\n  # Build specifies how an application should be deployed. In this case,\n  # we'll build using a Dockerfile and keeping it in a local registry.\n  build {\n    use \"docker\" {}\n\n    # Uncomment below to use a remote docker registry to push your built images.\n    #\n    # registry {\n    #   use \"docker\" {\n    #     image = \"registry.example.com/image\"\n    #     tag   = \"latest\"\n    #   }\n    # }\n\n  }\n\n  # Deploy to Docker\n  deploy {\n    use \"docker\" {\n      #Waypoint defaults inbound requests to port 3000\n      #This reactjs example app image listens on port 80, so we need to tell Waypoint to use the right port\n      service_port = 80\n    }\n  }\n}\n"
  },
  {
    "path": "docker/reactjs-packer/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.waypoint"
  },
  {
    "path": "docker/reactjs-packer/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# build environment\nFROM node:13.12.0-alpine as build\nWORKDIR /app\nENV PATH /app/node_modules/.bin:$PATH\nCOPY package.json ./\nCOPY package-lock.json ./\nRUN npm ci --silent\nRUN npm install react-scripts@3.4.1 -g --silent\nCOPY . ./\nRUN npm run build\n\n# production environment\nFROM ${base_image}\nCOPY nginx/default.conf /etc/nginx/conf.d/\nCOPY --from=build /app/build /usr/share/nginx/html\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n"
  },
  {
    "path": "docker/reactjs-packer/README.md",
    "content": "# Waypoint React.js Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|JavaScript|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nThis example demonstrates the usage of the Packer config sourcer plugin with a \nReactJS application. \n\nTo use the `nginx:stable-alpine` Docker image as the base image for the ReactJS\napplication, firstly the Packer build must be run with the command below. This \nwill pull the `nginx:stable-alpine` image from DockerHub, and push it to a local\nregistry, hosted at `localhost:5000`. Additionally, the configuration will push\nthe image metadata to a bucket in the HCP Packer registry, named `nginx`.\n\n```shell\n$ packer build nginx.pkr.hcl\n```\n\nTo use the Packer plugin, the configuration for the Packer plugin must be set\nwith the command below. An HCP client ID and secret, organization ID and project\nID must be set.\n\n```shell\n$ waypoint config source-set -type=packer -config=client_id=sunset -config=client_secret=sarsaparilla -config=organization_id=nuka-cola -config=project_id=quantum\n```\n\nWith that set, the dynamic input variable for the base image will retrieve the\nimage ID from your HCP Packer registry. The image ID returned will be the one\nwhose cloud provider and region match the one in the configuration. In this\nexample, this is `docker` for both, as the Docker plugin for Packer will set\nthis metadata, though other cloud providers may do thing differently.\n\n```hcl\nvariable \"image\" {\n  default = dynamic(\"packer\", {\n    bucket  = \"nginx\"\n    channel = \"base\"\n    region  = \"docker\"\n    cloud   = \"docker\"\n  })\n  type        = string\n  description = \"The name of the base image to use for building app Docker images.\"\n}\n```\n\nThis dynamic input variable is used during the build portion of the Waypoint\napp lifecycle.\n\n```hcl\n  build {\n    use \"docker\" {\n      dockerfile = templatefile(\"${path.app}/Dockerfile\", {\n        base_image = var.image\n      })\n    }\n  }\n```\n\nIn the Dockerfile, this value is templated into the base image.\n\n```Dockerfile\nFROM node:13.12.0-alpine as build\nWORKDIR /app\nENV PATH /app/node_modules/.bin:$PATH\nCOPY package.json ./\nCOPY package-lock.json ./\nRUN npm ci --silent\nRUN npm install react-scripts@3.4.1 -g --silent\nCOPY . ./\nRUN npm run build\n\n# The image ID is templated here\nFROM ${base_image}\nCOPY nginx/default.conf /etc/nginx/conf.d/\nCOPY --from=build /app/build /usr/share/nginx/html\nEXPOSE 80\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n```\n"
  },
  {
    "path": "docker/reactjs-packer/nginx/default.conf",
    "content": "server {\n\n  listen 80;\n\n  sendfile on;\n\n  default_type application/octet-stream;\n\n\n  gzip on;\n  gzip_http_version 1.1;\n  gzip_disable      \"MSIE [1-6]\\.\";\n  gzip_min_length   1100;\n  gzip_vary         on;\n  gzip_proxied      expired no-cache no-store private auth;\n  gzip_types        text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;\n  gzip_comp_level   9;\n\n\n  root /usr/share/nginx/html;\n\n\n  location / {\n    try_files $uri $uri/ /index.html;                \n    proxy_read_timeout 300s;\n    proxy_connect_timeout 75s;\n  }\n  \n}\n\n"
  },
  {
    "path": "docker/reactjs-packer/nginx.pkr.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nbuild {\n  hcp_packer_registry {\n    bucket_name = \"nginx\"\n    description = \"Nginx image.\"\n  }\n\n  sources = [\n    \"source.docker.nginx\"\n  ]\n\n  post-processors {\n    // The two postprocessors here will push the image to a local registry\n    post-processor \"docker-tag\" {\n      repository = \"localhost:5000/nginx\"\n      tags       = [ \"stable-alpine\" ]    \n    }\n    \n    post-processor \"docker-push\" {\n      login = false\n    }\n  }\n}\n\nsource \"docker\" \"nginx\" {\n  image = \"nginx:stable-alpine\"\n  commit = true\n}\n"
  },
  {
    "path": "docker/reactjs-packer/package.json",
    "content": "{\n  \"name\": \"reactjs\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"^4.2.4\",\n    \"@testing-library/react\": \"^9.5.0\",\n    \"@testing-library/user-event\": \"^7.2.1\",\n    \"react\": \"^16.13.1\",\n    \"react-dom\": \"^16.13.1\",\n    \"react-scripts\": \"3.4.3\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": \"react-app\"\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "docker/reactjs-packer/public/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>Waypoint React Example</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "docker/reactjs-packer/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "docker/reactjs-packer/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "docker/reactjs-packer/src/App.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(pattern-tl.svg), url(pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "docker/reactjs-packer/src/App.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport logo from './logo.svg';\nimport language from './language.svg';\nimport hashi from './hashi.svg';\nimport './App.css';\n\nfunction App() {\n  return ( \n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src={logo} />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src={language} />\n        </div>\n        <h1>This React app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src={hashi} />\n        </a>\n      </footer>\n    </div>\n  );\n}\n\nexport default App;\n"
  },
  {
    "path": "docker/reactjs-packer/src/App.test.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport { render } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () => {\n  const { getByText } = render(<App />);\n  const linkElement = getByText(/learn react/i);\n  expect(linkElement).toBeInTheDocument();\n});\n"
  },
  {
    "path": "docker/reactjs-packer/src/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>,\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"
  },
  {
    "path": "docker/reactjs-packer/src/serviceWorker.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\nexport function register(config) {\n  if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl, config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' },\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n"
  },
  {
    "path": "docker/reactjs-packer/src/setupTests.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom/extend-expect';\n"
  },
  {
    "path": "docker/reactjs-packer/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"packer-plugin-project\"\n\nrunner {\n  enabled = true\n  data_source \"git\" {\n    url  = \"https://github.com/paladin-devops/waypoint-examples\"\n    path = \"docker/reactjs-packer\"\n    ref  = \"packer-plugin-example\"\n  }\n\n  poll {\n    enabled  = true\n    interval = \"30s\"\n  }\n}\n\nvariable \"image\" {\n  default = dynamic(\"packer\", {\n    bucket  = \"nginx\"\n    channel = \"base\"\n    region  = \"docker\"\n    cloud   = \"docker\"\n  })\n  type        = string\n  description = \"The name of the base image to use for building app Docker images.\"\n}\n\napp \"packer-plugin-app\" {\n  build {\n    use \"docker\" {\n      dockerfile = templatefile(\"${path.app}/Dockerfile\", {\n        base_image = var.image\n      })\n    }\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}"
  },
  {
    "path": "docker/ruby/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files for more about ignoring files.\n#\n# If you find yourself ignoring temporary files generated by your text editor\n# or operating system, you probably want to add a global ignore instead:\n#   git config --global core.excludesfile '~/.gitignore_global'\n\n# Ignore bundler config.\n/.bundle\n\n# Ignore the default SQLite database.\n/db/*.sqlite3\n/db/*.sqlite3-journal\n\n# Ignore all logfiles and tempfiles.\n/log/*.log\n/tmp\n\n# Ignore ruby-version\n/.ruby-version\n"
  },
  {
    "path": "docker/ruby/Gemfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nsource 'https://rubygems.org'\nruby '>= 2.3.5', '< 2.8'\n\n# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'\ngem 'rails', '~> 5.2.0'\n# Use postgresql as the database for Active Record\ngem 'pg', '~> 0.18'\n# Use SCSS for stylesheets\ngem 'sass-rails'\n# Use Uglifier as compressor for JavaScript assets\ngem 'uglifier'\n# Use CoffeeScript for .js.coffee assets and views\ngem 'coffee-rails'\n# See https://github.com/sstephenson/execjs#readme for more supported runtimes\n# gem 'therubyracer',  platforms: :ruby\ngem 'bootsnap', require: false\ngem 'listen'\n\n# Use jquery as the JavaScript library\ngem 'jquery-rails'\n# Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks\ngem 'turbolinks'\n# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder\ngem 'jbuilder'\n# bundle exec rake doc:rails generates the API under doc/api.\ngem 'sdoc',          group: :doc\n\n# Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring\ngem 'spring',        group: :development\n\n# Use ActiveModel has_secure_password\n# gem 'bcrypt', '~> 3.1.7'\n\ngem 'puma'\n\n# Use Capistrano for deployment\n# gem 'capistrano-rails', group: :development\n\n# Use debugger\n# gem 'debugger', group: [:development, :test]\n\ngem 'sprockets', '~> 3.7'\n"
  },
  {
    "path": "docker/ruby/Procfile",
    "content": "web: bundle exec puma -C config/puma.rb\n"
  },
  {
    "path": "docker/ruby/README.md",
    "content": "# Waypoint Ruby on Rails Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Local|\n|Language|Ruby|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nA barebones Rails app, which can easily be deployed by Waypoint.\n"
  },
  {
    "path": "docker/ruby/Rakefile",
    "content": "# Add your own tasks in files placed in lib/tasks ending in .rake,\n# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.\n\nrequire File.expand_path('../config/application', __FILE__)\n\nRails.application.load_tasks\n"
  },
  {
    "path": "docker/ruby/app/assets/images/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/app/assets/javascripts/application.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// This is a manifest file that'll be compiled into application.js, which will include all the files\n// listed below.\n//\n// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,\n// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.\n//\n// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the\n// compiled file.\n//\n// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details\n// about supported directives.\n//\n//= require jquery\n//= require jquery_ujs\n//= require turbolinks\n//= require_tree .\n"
  },
  {
    "path": "docker/ruby/app/assets/javascripts/welcome.js.coffee",
    "content": "# Place all the behaviors and hooks related to the matching controller here.\n# All this logic will automatically be available in application.js.\n# You can use CoffeeScript in this file: http://coffeescript.org/\n"
  },
  {
    "path": "docker/ruby/app/assets/javascripts/widgets.js.coffee",
    "content": "# Place all the behaviors and hooks related to the matching controller here.\n# All this logic will automatically be available in application.js.\n# You can use CoffeeScript in this file: http://coffeescript.org/\n"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/application.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n/*\n * This is a manifest file that'll be compiled into application.css, which will include all the files\n * listed below.\n *\n * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,\n * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.\n *\n * You're free to add application-wide styles to this file and they'll appear at the bottom of the\n * compiled file so the styles you add here take precedence over styles defined in any styles\n * defined in the other CSS/SCSS files in this directory. It is generally better to create a new\n * file per style scope.\n *\n *= require_tree .\n *= require_self\n */\n"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/main.css.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n$text: #E4E5E7;\n$background: #000;\n$brand: #04C6C2;\n$headline: #FFF;\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: $text;\n  text-align: center;\n  background-image: url(asset-path('pattern-tl.svg')), url(asset-path('pattern-br.svg'));\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: $background;\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba($brand, .5);\n  background: rgba($brand, .15);\n}\n\nsection h1 {\n  color: $headline;\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: $brand;\n}"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/scaffolds.css.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/theme.css.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n$brand-primary: #532F8C;\n$brand-language: #B01302;\n\n.jumbotron {\n  background: $brand-primary;\n  color: white;\n  padding-bottom: 80px;\n\n  .btn-primary {\n    background: lighten($brand-primary, 20%);\n    border-color: lighten($brand-primary, 20%);\n    &:hover {\n      background: lighten($brand-primary, 15%);\n    }\n  }\n\n  p {\n    color: lighten($brand-primary, 50%);\n    max-width: 75%;\n    margin: 1em auto 2em;\n  }\n\n  .navbar + & {\n    margin-top: -20px;\n  }\n\n  .lang-logo {\n    display: block;\n    background: $brand-language;\n    border-radius: 50%;\n    overflow: hidden;\n    width: 100px;\n    height: 100px;\n    margin: auto;\n    border: 2px solid white;\n    img {\n      max-width: 100%;\n    }\n  }\n\n}\n\n"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/welcome.css.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Place all the styles related to the welcome controller here.\n// They will automatically be included in application.css.\n// You can use Sass (SCSS) here: http://sass-lang.com/"
  },
  {
    "path": "docker/ruby/app/assets/stylesheets/widgets.css.scss",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n// Place all the styles related to the Widgets controller here.\n// They will automatically be included in application.css.\n// You can use Sass (SCSS) here: http://sass-lang.com/\n"
  },
  {
    "path": "docker/ruby/app/controllers/application_controller.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nclass ApplicationController < ActionController::Base\n  # Prevent CSRF attacks by raising an exception.\n  # For APIs, you may want to use :null_session instead.\n  protect_from_forgery with: :exception\nend\n"
  },
  {
    "path": "docker/ruby/app/controllers/concerns/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/app/controllers/welcome_controller.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nclass WelcomeController < ApplicationController\n\n  # GET /welcome\n  def index\n    @host = request.host_with_port\n  end\n\nend\n"
  },
  {
    "path": "docker/ruby/app/controllers/widgets_controller.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nclass WidgetsController < ApplicationController\n  before_action :set_widget, only: [:show, :edit, :update, :destroy]\n\n  # GET /widgets\n  # GET /widgets.json\n  def index\n    @widgets = Widget.all\n  end\n\n  # GET /widgets/1\n  # GET /widgets/1.json\n  def show\n  end\n\n  # GET /widgets/new\n  def new\n    @widget = Widget.new\n  end\n\n  # GET /widgets/1/edit\n  def edit\n  end\n\n  # POST /widgets\n  # POST /widgets.json\n  def create\n    @widget = Widget.new(widget_params)\n\n    respond_to do |format|\n      if @widget.save\n        format.html { redirect_to @widget, notice: 'Widget was successfully created.' }\n        format.json { render :show, status: :created, location: @widget }\n      else\n        format.html { render :new }\n        format.json { render json: @widget.errors, status: :unprocessable_entity }\n      end\n    end\n  end\n\n  # PATCH/PUT /widgets/1\n  # PATCH/PUT /widgets/1.json\n  def update\n    respond_to do |format|\n      if @widget.update(widget_params)\n        format.html { redirect_to @widget, notice: 'Widget was successfully updated.' }\n        format.json { render :show, status: :ok, location: @widget }\n      else\n        format.html { render :edit }\n        format.json { render json: @widget.errors, status: :unprocessable_entity }\n      end\n    end\n  end\n\n  # DELETE /widgets/1\n  # DELETE /widgets/1.json\n  def destroy\n    @widget.destroy\n    respond_to do |format|\n      format.html { redirect_to widgets_url, notice: 'Widget was successfully destroyed.' }\n      format.json { head :no_content }\n    end\n  end\n\n  private\n    # Use callbacks to share common setup or constraints between actions.\n    def set_widget\n      @widget = Widget.find(params[:id])\n    end\n\n    # Never trust parameters from the scary internet, only allow the white list through.\n    def widget_params\n      params.require(:widget).permit(:name, :description, :stock)\n    end\nend\n"
  },
  {
    "path": "docker/ruby/app/helpers/application_helper.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nmodule ApplicationHelper\nend\n"
  },
  {
    "path": "docker/ruby/app/helpers/welcome_helper.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nmodule WelcomeHelper\nend\n"
  },
  {
    "path": "docker/ruby/app/helpers/widgets_helper.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nmodule WidgetsHelper\nend\n"
  },
  {
    "path": "docker/ruby/app/mailers/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/app/models/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/app/models/concerns/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/app/models/widget.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nclass Widget < ActiveRecord::Base\nend\n"
  },
  {
    "path": "docker/ruby/app/views/layouts/application.html.erb",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Waypoint Ruby on Rails Example</title>\n    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>\n    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>\n    <%= csrf_meta_tags %>\n  </head>\n  \n  <body>\n    <%= yield %>\n  </body>\n</html>\n"
  },
  {
    "path": "docker/ruby/app/views/welcome/index.erb",
    "content": "<div class=\"container\">\n  <header>\n    <a href=\"https://waypointproject.io\" class=\"logo\">\n      <img src=\"<%= asset_path('logo.svg') %>\" alt=\"Logo\" />\n    </a>\n  </header>\n  <section class=\"content\">\n    <div class=\"language-icon\">\n      <img src=\"<%= asset_path('language.svg') %>\" alt=\"Ruby Icon\" />\n    </div>\n    <h1>This Ruby on Rails app was deployed with Waypoint.</h1>\n    <p>\n      Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n    </p>\n    <p>\n      Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n    </p>\n  </section>\n  <footer>\n    <a href=\"https://hashicorp.com\" class=\"hashi\">\n      <img src=\"<%= asset_path('hashi.svg') %>\" alt=\"HashiCorp\" />\n    </a>\n  </footer>\n</div>"
  },
  {
    "path": "docker/ruby/app/views/widgets/_form.html.erb",
    "content": "<%= form_for(@widget) do |f| %>\n  <% if @widget.errors.any? %>\n    <div id=\"error_explanation\">\n      <h2><%= pluralize(@widget.errors.count, \"error\") %> prohibited this widget from being saved:</h2>\n\n      <ul>\n      <% @widget.errors.full_messages.each do |message| %>\n        <li><%= message %></li>\n      <% end %>\n      </ul>\n    </div>\n  <% end %>\n\n  <div class=\"field\">\n    <%= f.label :name %><br>\n    <%= f.text_field :name %>\n  </div>\n  <div class=\"field\">\n    <%= f.label :description %><br>\n    <%= f.text_area :description %>\n  </div>\n  <div class=\"field\">\n    <%= f.label :stock %><br>\n    <%= f.number_field :stock %>\n  </div>\n  <div class=\"actions\">\n    <%= f.submit %>\n  </div>\n<% end %>\n"
  },
  {
    "path": "docker/ruby/app/views/widgets/edit.html.erb",
    "content": "<div class=\"container\">\n\n<h1>Editing widget</h1>\n\n<%= render 'form' %>\n\n<%= link_to 'Show', @widget %> |\n<%= link_to 'Back', widgets_path %>\n\n</div>"
  },
  {
    "path": "docker/ruby/app/views/widgets/index.html.erb",
    "content": "<div class=\"container\">\n<h1>Listing widgets</h1>\n\n<table class=\"table\">\n  <thead>\n    <tr>\n      <th>Name</th>\n      <th>Description</th>\n      <th>Stock</th>\n      <th colspan=\"3\"></th>\n    </tr>\n  </thead>\n\n  <tbody>\n    <% @widgets.each do |widget| %>\n      <tr>\n        <td><%= widget.name %></td>\n        <td><%= widget.description %></td>\n        <td><%= widget.stock %></td>\n        <td><%= link_to 'Show', widget %></td>\n        <td><%= link_to 'Edit', edit_widget_path(widget) %></td>\n        <td><%= link_to 'Destroy', widget, method: :delete, data: { confirm: 'Are you sure?' } %></td>\n      </tr>\n    <% end %>\n  </tbody>\n</table>\n\n<br>\n\n<%= link_to 'New Widget', new_widget_path %>\n\n</div>"
  },
  {
    "path": "docker/ruby/app/views/widgets/index.json.jbuilder",
    "content": "json.array!(@widgets) do |widget|\n  json.extract! widget, :id, :name, :description, :stock\n  json.url widget_url(widget, format: :json)\nend\n"
  },
  {
    "path": "docker/ruby/app/views/widgets/new.html.erb",
    "content": "<div class=\"container\">\n\n<h1>New widget</h1>\n\n<%= render 'form' %>\n\n<%= link_to 'Back', widgets_path %>\n\n</div>"
  },
  {
    "path": "docker/ruby/app/views/widgets/show.html.erb",
    "content": "<div class=\"container\">\n\n<p id=\"notice\"><%= notice %></p>\n\n<p>\n  <strong>Name:</strong>\n  <%= @widget.name %>\n</p>\n\n<p>\n  <strong>Description:</strong>\n  <%= @widget.description %>\n</p>\n\n<p>\n  <strong>Stock:</strong>\n  <%= @widget.stock %>\n</p>\n\n<%= link_to 'Edit', edit_widget_path(@widget) %> |\n<%= link_to 'Back', widgets_path %>\n\n</div>"
  },
  {
    "path": "docker/ruby/app/views/widgets/show.json.jbuilder",
    "content": "json.extract! @widget, :id, :name, :description, :stock, :created_at, :updated_at\n"
  },
  {
    "path": "docker/ruby/bin/bundle",
    "content": "#!/usr/bin/env ruby\nENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)\nload Gem.bin_path('bundler', 'bundle')\n"
  },
  {
    "path": "docker/ruby/bin/rails",
    "content": "#!/usr/bin/env ruby\nAPP_PATH = File.expand_path('../config/application', __dir__)\nrequire_relative '../config/boot'\nrequire 'rails/commands'\n"
  },
  {
    "path": "docker/ruby/bin/rake",
    "content": "#!/usr/bin/env ruby\nrequire_relative '../config/boot'\nrequire 'rake'\nRake.application.run\n"
  },
  {
    "path": "docker/ruby/bin/setup",
    "content": "#!/usr/bin/env ruby\nrequire 'fileutils'\ninclude FileUtils\n\n# path to your application root.\nAPP_ROOT = File.expand_path('..', __dir__)\n\ndef system!(*args)\n  system(*args) || abort(\"\\n== Command #{args} failed ==\")\nend\n\nchdir APP_ROOT do\n  # This script is a starting point to setup your application.\n  # Add necessary setup steps to this file.\n\n  puts '== Installing dependencies =='\n  system! 'gem install bundler --conservative'\n  system('bundle check') || system!('bundle install')\n\n  # Install JavaScript dependencies if using Yarn\n  # system('bin/yarn')\n\n  # puts \"\\n== Copying sample files ==\"\n  # unless File.exist?('config/database.yml')\n  #   cp 'config/database.yml.sample', 'config/database.yml'\n  # end\n\n  puts \"\\n== Preparing database ==\"\n  system! 'bin/rails db:setup'\n\n  puts \"\\n== Removing old logs and tempfiles ==\"\n  system! 'bin/rails log:clear tmp:clear'\n\n  puts \"\\n== Restarting application server ==\"\n  system! 'bin/rails restart'\nend\n"
  },
  {
    "path": "docker/ruby/bin/spring",
    "content": "#!/usr/bin/env ruby\n\n# This file loads spring without using Bundler, in order to be fast\n# It gets overwritten when you run the `spring binstub` command\n\nunless defined?(Spring)\n  require \"rubygems\"\n  require \"bundler\"\n\n  if match = Bundler.default_lockfile.read.match(/^GEM$.*?^    spring \\((.*?)\\)$.*?^$/m)\n    ENV[\"GEM_PATH\"] = ([Bundler.bundle_path.to_s] + Gem.path).join(File::PATH_SEPARATOR)\n    ENV[\"GEM_HOME\"] = \"\"\n    Gem.paths = ENV\n\n    gem \"spring\", match[1]\n    require \"spring/binstub\"\n  end\nend\n"
  },
  {
    "path": "docker/ruby/bin/update",
    "content": "#!/usr/bin/env ruby\nrequire 'fileutils'\ninclude FileUtils\n\n# path to your application root.\nAPP_ROOT = File.expand_path('..', __dir__)\n\ndef system!(*args)\n  system(*args) || abort(\"\\n== Command #{args} failed ==\")\nend\n\nchdir APP_ROOT do\n  # This script is a way to update your development environment automatically.\n  # Add necessary update steps to this file.\n\n  puts '== Installing dependencies =='\n  system! 'gem install bundler --conservative'\n  system('bundle check') || system!('bundle install')\n\n  # Install JavaScript dependencies if using Yarn\n  # system('bin/yarn')\n\n  puts \"\\n== Updating database ==\"\n  system! 'bin/rails db:migrate'\n\n  puts \"\\n== Removing old logs and tempfiles ==\"\n  system! 'bin/rails log:clear tmp:clear'\n\n  puts \"\\n== Restarting application server ==\"\n  system! 'bin/rails restart'\nend\n"
  },
  {
    "path": "docker/ruby/bin/yarn",
    "content": "#!/usr/bin/env ruby\nAPP_ROOT = File.expand_path('..', __dir__)\nDir.chdir(APP_ROOT) do\n  begin\n    exec \"yarnpkg\", *ARGV\n  rescue Errno::ENOENT\n    $stderr.puts \"Yarn executable was not detected in the system.\"\n    $stderr.puts \"Download Yarn at https://yarnpkg.com/en/docs/install\"\n    exit 1\n  end\nend\n"
  },
  {
    "path": "docker/ruby/config/application.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire_relative 'boot'\n\nrequire 'rails/all'\n\n# Require the gems listed in Gemfile, including any gems\n# you've limited to :test, :development, or :production.\nBundler.require(*Rails.groups)\n\nmodule RubyGettingStarted\n  class Application < Rails::Application\n    # Initialize configuration defaults for originally generated Rails version.\n    config.load_defaults 5.0\n\n    # Settings in config/environments/* take precedence over those specified here.\n    # Application configuration can go into files in config/initializers\n    # -- all .rb files in that directory are automatically loaded after loading\n    # the framework and any gems in your application.\n  end\nend\n"
  },
  {
    "path": "docker/ruby/config/boot.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__)\n\nrequire 'bundler/setup' # Set up gems listed in the Gemfile.\nrequire 'bootsnap/setup' # Speed up boot time by caching expensive operations.\n"
  },
  {
    "path": "docker/ruby/config/cable.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\ndevelopment:\n  adapter: async\n\ntest:\n  adapter: async\n\nproduction:\n  adapter: redis\n  url: <%= ENV.fetch(\"REDIS_URL\") { \"redis://localhost:6379/1\" } %>\n  channel_prefix: ruby_getting_started_production\n"
  },
  {
    "path": "docker/ruby/config/database.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# PostgreSQL. Versions 8.2 and up are supported.\n#\n# Install the pg driver:\n#   gem install pg\n# On OS X with Homebrew:\n#   gem install pg -- --with-pg-config=/usr/local/bin/pg_config\n# On OS X with MacPorts:\n#   gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config\n# On Windows:\n#   gem install pg\n#       Choose the win32 build.\n#       Install PostgreSQL and put its /bin directory on your path.\n#\n# Configure Using Gemfile\n# gem 'pg'\n#\ndefault: &default\n  adapter: postgresql\n  encoding: unicode\n  # For details on connection pooling, see rails configuration guide\n  # http://guides.rubyonrails.org/configuring.html#database-pooling\n  pool: 5\n\ndevelopment:\n  <<: *default\n  database: ruby-getting-started_development\n\n  # The specified database role being used to connect to postgres.\n  # To create additional roles in postgres see `$ createuser --help`.\n  # When left blank, postgres will use the default role. This is\n  # the same name as the operating system user that initialized the database.\n  #username: ruby-getting-started\n\n  # The password associated with the postgres role (username).\n  #password:\n\n  # Connect on a TCP socket. Omitted by default since the client uses a\n  # domain socket that doesn't need configuration. Windows does not have\n  # domain sockets, so uncomment these lines.\n  #host: localhost\n\n  # The TCP port the server listens on. Defaults to 5432.\n  # If your server runs on a different port number, change accordingly.\n  #port: 5432\n\n  # Schema search path. The server defaults to $user,public\n  #schema_search_path: myapp,sharedapp,public\n\n  # Minimum log levels, in increasing order:\n  #   debug5, debug4, debug3, debug2, debug1,\n  #   log, notice, warning, error, fatal, and panic\n  # Defaults to warning.\n  #min_messages: notice\n\n# Warning: The database defined as \"test\" will be erased and\n# re-generated from your development database when you run \"rake\".\n# Do not set this db to the same as development or production.\ntest:\n  <<: *default\n  database: ruby-getting-started_test\n\n# As with config/secrets.yml, you never want to store sensitive information,\n# like your database password, in your source code. If your source code is\n# ever seen by anyone, they now have access to your database.\n#\n# Instead, provide the password as a unix environment variable when you boot\n# the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database\n# for a full rundown on how to provide these environment variables in a\n# production deployment.\n#\n# On Heroku and other platform providers, you may have a full connection URL\n# available as an environment variable. For example:\n#\n#   DATABASE_URL=\"postgres://myuser:mypass@localhost/somedatabase\"\n#\n# You can use this database configuration with:\n#\n#   production:\n#     url: <%= ENV['DATABASE_URL'] %>\n#\nproduction:\n  <<: *default\n  database: ruby-getting-started_production\n  username: ruby-getting-started\n  password: <%= ENV['RUBY-GETTING-STARTED_DATABASE_PASSWORD'] %>\n"
  },
  {
    "path": "docker/ruby/config/environment.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Load the Rails application.\nrequire_relative 'application'\n\n# Initialize the Rails application.\nRails.application.initialize!\n"
  },
  {
    "path": "docker/ruby/config/environments/development.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # In the development environment your application's code is reloaded on\n  # every request. This slows down response time but is perfect for development\n  # since you don't have to restart the web server when you make code changes.\n  config.cache_classes = false\n\n  # Do not eager load code on boot.\n  config.eager_load = false\n\n  # Show full error reports.\n  config.consider_all_requests_local = true\n\n  # Enable/disable caching. By default caching is disabled.\n  # Run rails dev:cache to toggle caching.\n  if Rails.root.join('tmp', 'caching-dev.txt').exist?\n    config.action_controller.perform_caching = true\n\n    config.cache_store = :memory_store\n    config.public_file_server.headers = {\n      'Cache-Control' => \"public, max-age=#{2.days.to_i}\"\n    }\n  else\n    config.action_controller.perform_caching = false\n\n    config.cache_store = :null_store\n  end\n\n  # Store uploaded files on the local file system (see config/storage.yml for options)\n  config.active_storage.service = :local\n\n  # Don't care if the mailer can't send.\n  config.action_mailer.raise_delivery_errors = false\n\n  config.action_mailer.perform_caching = false\n\n  # Print deprecation notices to the Rails logger.\n  config.active_support.deprecation = :log\n\n  # Raise an error on page load if there are pending migrations.\n  config.active_record.migration_error = :page_load\n\n  # Highlight code that triggered database queries in logs.\n  config.active_record.verbose_query_logs = true\n\n  # Debug mode disables concatenation and preprocessing of assets.\n  # This option may cause significant delays in view rendering with a large\n  # number of complex assets.\n  config.assets.debug = true\n\n  # Suppress logger output for asset requests.\n  config.assets.quiet = true\n\n  # Raises error for missing translations\n  # config.action_view.raise_on_missing_translations = true\n\n  # Use an evented file watcher to asynchronously detect changes in source code,\n  # routes, locales, etc. This feature depends on the listen gem.\n  config.file_watcher = ActiveSupport::EventedFileUpdateChecker\nend\n"
  },
  {
    "path": "docker/ruby/config/environments/production.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # Code is not reloaded between requests.\n  config.cache_classes = true\n\n  # Eager load code on boot. This eager loads most of Rails and\n  # your application in memory, allowing both threaded web servers\n  # and those relying on copy on write to perform better.\n  # Rake tasks automatically ignore this option for performance.\n  config.eager_load = true\n\n  # Full error reports are disabled and caching is turned on.\n  config.consider_all_requests_local       = false\n  config.action_controller.perform_caching = true\n\n  # Ensures that a master key has been made available in either ENV[\"RAILS_MASTER_KEY\"]\n  # or in config/master.key. This key is used to decrypt credentials (and other encrypted files).\n  # config.require_master_key = true\n\n  # Disable serving static files from the `/public` folder by default since\n  # Apache or NGINX already handles this.\n  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?\n\n  # Compress JavaScripts and CSS.\n  config.assets.js_compressor = :uglifier\n  # config.assets.css_compressor = :sass\n\n  # Do not fallback to assets pipeline if a precompiled asset is missed.\n  config.assets.compile = false\n\n  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb\n\n  # Enable serving of images, stylesheets, and JavaScripts from an asset server.\n  # config.action_controller.asset_host = 'http://assets.example.com'\n\n  # Specifies the header that your server uses for sending files.\n  # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache\n  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX\n\n  # Store uploaded files on the local file system (see config/storage.yml for options)\n  config.active_storage.service = :local\n\n  # Mount Action Cable outside main process or domain\n  # config.action_cable.mount_path = nil\n  # config.action_cable.url = 'wss://example.com/cable'\n  # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\\/\\/example.*/ ]\n\n  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.\n  # config.force_ssl = true\n\n  # Use the lowest log level to ensure availability of diagnostic information\n  # when problems arise.\n  config.log_level = :debug\n\n  # Prepend all log lines with the following tags.\n  config.log_tags = [ :request_id ]\n\n  # Use a different cache store in production.\n  # config.cache_store = :mem_cache_store\n\n  # Use a real queuing backend for Active Job (and separate queues per environment)\n  # config.active_job.queue_adapter     = :resque\n  # config.active_job.queue_name_prefix = \"ruby_getting_started_#{Rails.env}\"\n\n  config.action_mailer.perform_caching = false\n\n  # Ignore bad email addresses and do not raise email delivery errors.\n  # Set this to true and configure the email server for immediate delivery to raise delivery errors.\n  # config.action_mailer.raise_delivery_errors = false\n\n  # Enable locale fallbacks for I18n (makes lookups for any locale fall back to\n  # the I18n.default_locale when a translation cannot be found).\n  config.i18n.fallbacks = true\n\n  # Send deprecation notices to registered listeners.\n  config.active_support.deprecation = :notify\n\n  # Use default logging formatter so that PID and timestamp are not suppressed.\n  config.log_formatter = ::Logger::Formatter.new\n\n  # Use a different logger for distributed setups.\n  # require 'syslog/logger'\n  # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')\n\n  if ENV[\"RAILS_LOG_TO_STDOUT\"].present?\n    logger           = ActiveSupport::Logger.new(STDOUT)\n    logger.formatter = config.log_formatter\n    config.logger    = ActiveSupport::TaggedLogging.new(logger)\n  end\n\n  # Do not dump schema after migrations.\n  config.active_record.dump_schema_after_migration = false\nend\n"
  },
  {
    "path": "docker/ruby/config/environments/test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nRails.application.configure do\n  # Settings specified here will take precedence over those in config/application.rb.\n\n  # The test environment is used exclusively to run your application's\n  # test suite. You never need to work with it otherwise. Remember that\n  # your test database is \"scratch space\" for the test suite and is wiped\n  # and recreated between test runs. Don't rely on the data there!\n  config.cache_classes = true\n\n  # Do not eager load code on boot. This avoids loading your whole application\n  # just for the purpose of running a single test. If you are using a tool that\n  # preloads Rails for running tests, you may have to set it to true.\n  config.eager_load = false\n\n  # Configure public file server for tests with Cache-Control for performance.\n  config.public_file_server.enabled = true\n  config.public_file_server.headers = {\n    'Cache-Control' => \"public, max-age=#{1.hour.to_i}\"\n  }\n\n  # Show full error reports and disable caching.\n  config.consider_all_requests_local       = true\n  config.action_controller.perform_caching = false\n\n  # Raise exceptions instead of rendering exception templates.\n  config.action_dispatch.show_exceptions = false\n\n  # Disable request forgery protection in test environment.\n  config.action_controller.allow_forgery_protection = false\n\n  # Store uploaded files on the local file system in a temporary directory\n  config.active_storage.service = :test\n\n  config.action_mailer.perform_caching = false\n\n  # Tell Action Mailer not to deliver emails to the real world.\n  # The :test delivery method accumulates sent emails in the\n  # ActionMailer::Base.deliveries array.\n  config.action_mailer.delivery_method = :test\n\n  # Print deprecation notices to the stderr.\n  config.active_support.deprecation = :stderr\n\n  # Raises error for missing translations\n  # config.action_view.raise_on_missing_translations = true\nend\n"
  },
  {
    "path": "docker/ruby/config/initializers/application_controller_renderer.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# ActiveSupport::Reloader.to_prepare do\n#   ApplicationController.renderer.defaults.merge!(\n#     http_host: 'example.org',\n#     https: false\n#   )\n# end\n"
  },
  {
    "path": "docker/ruby/config/initializers/assets.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Version of your assets, change this if you want to expire all your assets.\nRails.application.config.assets.version = '1.0'\n\n# Add additional assets to the asset load path.\n# Rails.application.config.assets.paths << Emoji.images_path\n# Add Yarn node_modules folder to the asset load path.\nRails.application.config.assets.paths << Rails.root.join('node_modules')\n\n# Precompile additional assets.\n# application.js, application.css, and all non-JS/CSS in the app/assets\n# folder are already added.\n# Rails.application.config.assets.precompile += %w( admin.js admin.css )\n"
  },
  {
    "path": "docker/ruby/config/initializers/backtrace_silencers.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.\n# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }\n\n# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code.\n# Rails.backtrace_cleaner.remove_silencers!\n"
  },
  {
    "path": "docker/ruby/config/initializers/content_security_policy.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Define an application-wide content security policy\n# For further information see the following documentation\n# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy\n\n# Rails.application.config.content_security_policy do |policy|\n#   policy.default_src :self, :https\n#   policy.font_src    :self, :https, :data\n#   policy.img_src     :self, :https, :data\n#   policy.object_src  :none\n#   policy.script_src  :self, :https\n#   policy.style_src   :self, :https\n\n#   # Specify URI for violation reports\n#   # policy.report_uri \"/csp-violation-report-endpoint\"\n# end\n\n# If you are using UJS then enable automatic nonce generation\n# Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }\n\n# Report CSP violations to a specified URI\n# For further information see the following documentation:\n# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only\n# Rails.application.config.content_security_policy_report_only = true\n"
  },
  {
    "path": "docker/ruby/config/initializers/cookies_serializer.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Specify a serializer for the signed and encrypted cookie jars.\n# Valid options are :json, :marshal, and :hybrid.\nRails.application.config.action_dispatch.cookies_serializer = :json\n"
  },
  {
    "path": "docker/ruby/config/initializers/filter_parameter_logging.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Configure sensitive parameters which will be filtered from the log file.\nRails.application.config.filter_parameters += [:password]\n"
  },
  {
    "path": "docker/ruby/config/initializers/inflections.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Add new inflection rules using the following format. Inflections\n# are locale specific, and you may define rules for as many different\n# locales as you wish. All of these examples are active by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.plural /^(ox)$/i, '\\1en'\n#   inflect.singular /^(ox)en/i, '\\1'\n#   inflect.irregular 'person', 'people'\n#   inflect.uncountable %w( fish sheep )\n# end\n\n# These inflection rules are supported but not enabled by default:\n# ActiveSupport::Inflector.inflections(:en) do |inflect|\n#   inflect.acronym 'RESTful'\n# end\n"
  },
  {
    "path": "docker/ruby/config/initializers/mime_types.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Add new mime types for use in respond_to blocks:\n# Mime::Type.register \"text/richtext\", :rtf\n"
  },
  {
    "path": "docker/ruby/config/initializers/new_framework_defaults_5_2.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n#\n# This file contains migration options to ease your Rails 5.2 upgrade.\n#\n# Once upgraded flip defaults one by one to migrate to the new default.\n#\n# Read the Guide for Upgrading Ruby on Rails for more info on each option.\n\n# Make Active Record use stable #cache_key alongside new #cache_version method.\n# This is needed for recyclable cache keys.\n# Rails.application.config.active_record.cache_versioning = true\n\n# Use AES-256-GCM authenticated encryption for encrypted cookies.\n# Also, embed cookie expiry in signed or encrypted cookies for increased security.\n#\n# This option is not backwards compatible with earlier Rails versions.\n# It's best enabled when your entire app is migrated and stable on 5.2.\n#\n# Existing cookies will be converted on read then written with the new scheme.\n# Rails.application.config.action_dispatch.use_authenticated_cookie_encryption = true\n\n# Use AES-256-GCM authenticated encryption as default cipher for encrypting messages\n# instead of AES-256-CBC, when use_authenticated_message_encryption is set to true.\n# Rails.application.config.active_support.use_authenticated_message_encryption = true\n\n# Add default protection from forgery to ActionController::Base instead of in\n# ApplicationController.\n# Rails.application.config.action_controller.default_protect_from_forgery = true\n\n# Store boolean values are in sqlite3 databases as 1 and 0 instead of 't' and\n# 'f' after migrating old data.\n# Rails.application.config.active_record.sqlite3.represent_boolean_as_integer = true\n\n# Use SHA-1 instead of MD5 to generate non-sensitive digests, such as the ETag header.\n# Rails.application.config.active_support.use_sha1_digests = true\n\n# Make `form_with` generate id attributes for any generated HTML tags.\n# Rails.application.config.action_view.form_with_generates_ids = true\n"
  },
  {
    "path": "docker/ruby/config/initializers/session_store.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\nRails.application.config.session_store :cookie_store, key: '_ruby-getting-started_session'\n"
  },
  {
    "path": "docker/ruby/config/initializers/wrap_parameters.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# This file contains settings for ActionController::ParamsWrapper which\n# is enabled by default.\n\n# Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.\nActiveSupport.on_load(:action_controller) do\n  wrap_parameters format: [:json]\nend\n\n# To enable root element in JSON for ActiveRecord objects.\n# ActiveSupport.on_load(:active_record) do\n#   self.include_root_in_json = true\n# end\n"
  },
  {
    "path": "docker/ruby/config/locales/en.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Files in the config/locales directory are used for internationalization\n# and are automatically loaded by Rails. If you want to use locales other\n# than English, add the necessary files in this directory.\n#\n# To use the locales, use `I18n.t`:\n#\n#     I18n.t 'hello'\n#\n# In views, this is aliased to just `t`:\n#\n#     <%= t('hello') %>\n#\n# To use a different locale, set it with `I18n.locale`:\n#\n#     I18n.locale = :es\n#\n# This would use the information in config/locales/es.yml.\n#\n# The following keys must be escaped otherwise they will not be retrieved by\n# the default I18n backend:\n#\n# true, false, on, off, yes, no\n#\n# Instead, surround them with single quotes.\n#\n# en:\n#   'true': 'foo'\n#\n# To learn more, please read the Rails Internationalization guide\n# available at http://guides.rubyonrails.org/i18n.html.\n\nen:\n  hello: \"Hello world\"\n"
  },
  {
    "path": "docker/ruby/config/puma.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nworkers ENV.fetch('WEB_CONCURRENCY') { 2 }\nthreads_count = ENV.fetch('RAILS_MAX_THREADS') { 5 }\nthreads threads_count, threads_count\n\npreload_app!\n\nrackup      DefaultRackup\nport        ENV.fetch(\"PORT\") { 3000 }\nenvironment ENV.fetch(\"RAILS_ENV\") { \"development\" }\n\non_worker_boot do\n  # Worker specific setup for Rails 4.1+\n  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot\n  ActiveRecord::Base.establish_connection\nend\n\n# Allow puma to be restarted by `rails restart` command.\nplugin :tmp_restart\n"
  },
  {
    "path": "docker/ruby/config/routes.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nRails.application.routes.draw do\n  resources :widgets\n\n  # The priority is based upon order of creation: first created -> highest priority.\n  # See how all your routes lay out with \"rake routes\".\n\n  # You can have the root of your site routed with \"root\"\n\n  root 'welcome#index'\n\n  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html\nend\n"
  },
  {
    "path": "docker/ruby/config/secrets.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Be sure to restart your server when you modify this file.\n\n# Your secret key is used for verifying the integrity of signed cookies.\n# If you change this key, all old signed cookies will become invalid!\n\n# Make sure the secret is at least 30 characters and all random,\n# no regular words or you'll be exposed to dictionary attacks.\n# You can use `rake secret` to generate a secure secret key.\n\n# Make sure the secrets in this file are kept private\n# if you're sharing your code publicly.\n\ndevelopment:\n  secret_key_base: 86bc88971370072b5c3fb0122870b37ce0750d2c883f0890165dc45a43bad83b64625f9fba351730afe26002f006db3ecc193fffc63ff38a827825746041d28f\n\ntest:\n  secret_key_base: 189f8e836260fb93a522a78e6a157b34178bd09d65174da1e64a964f9c4010a76d620332e6b2106b3af215cc4522a0e6053aed7b108ef8c5ee0ae25cef38f7c0\n\n# Do not keep production secrets in the repository,\n# instead read values from the environment.\nproduction:\n  secret_key_base: <%= ENV[\"SECRET_KEY_BASE\"] %>\n"
  },
  {
    "path": "docker/ruby/config/spring.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n%w[\n  .ruby-version\n  .rbenv-vars\n  tmp/restart.txt\n  tmp/caching-dev.txt\n].each { |path| Spring.watch(path) }\n"
  },
  {
    "path": "docker/ruby/config/storage.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\ntest:\n  service: Disk\n  root: <%= Rails.root.join(\"tmp/storage\") %>\n\nlocal:\n  service: Disk\n  root: <%= Rails.root.join(\"storage\") %>\n\n# Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)\n# amazon:\n#   service: S3\n#   access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>\n#   secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>\n#   region: us-east-1\n#   bucket: your_own_bucket\n\n# Remember not to checkin your GCS keyfile to a repository\n# google:\n#   service: GCS\n#   project: your_project\n#   credentials: <%= Rails.root.join(\"path/to/gcs.keyfile\") %>\n#   bucket: your_own_bucket\n\n# Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)\n# microsoft:\n#   service: AzureStorage\n#   storage_account_name: your_account_name\n#   storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>\n#   container: your_container_name\n\n# mirror:\n#   service: Mirror\n#   primary: local\n#   mirrors: [ amazon, google, microsoft ]\n"
  },
  {
    "path": "docker/ruby/config.ru",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# This file is used by Rack-based servers to start the application.\n\nrequire ::File.expand_path('../config/environment',  __FILE__)\nrun Rails.application\n"
  },
  {
    "path": "docker/ruby/db/migrate/20140707111715_create_widgets.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nclass CreateWidgets < ActiveRecord::Migration[5.1]\n  def change\n    create_table :widgets do |t|\n      t.string :name\n      t.text :description\n      t.integer :stock\n\n      t.timestamps\n    end\n  end\nend\n"
  },
  {
    "path": "docker/ruby/db/schema.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# This file is auto-generated from the current state of the database. Instead\n# of editing this file, please use the migrations feature of Active Record to\n# incrementally modify your database, and then regenerate this schema definition.\n#\n# Note that this schema.rb definition is the authoritative source for your\n# database schema. If you need to create the application database on another\n# system, you should be using db:schema:load, not running all the migrations\n# from scratch. The latter is a flawed and unsustainable approach (the more migrations\n# you'll amass, the slower it'll run and the greater likelihood for issues).\n#\n# It's strongly recommended that you check this file into your version control system.\n\nActiveRecord::Schema.define(version: 20140707111715) do\n\n  # These are extensions that must be enabled in order to support this database\n  enable_extension \"plpgsql\"\n\n  create_table \"widgets\", force: :cascade do |t|\n    t.string \"name\"\n    t.text \"description\"\n    t.integer \"stock\"\n    t.datetime \"created_at\", null: false\n    t.datetime \"updated_at\", null: false\n  end\n\nend\n"
  },
  {
    "path": "docker/ruby/db/seeds.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# This file should contain all the record creation needed to seed the database with its default values.\n# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).\n#\n# Examples:\n#\n#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])\n#   Mayor.create(name: 'Emanuel', city: cities.first)\n"
  },
  {
    "path": "docker/ruby/lib/assets/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/lib/tasks/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/log/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/public/404.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n<head>\n  <title>The page you were looking for doesn't exist (404)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/404.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The page you were looking for doesn't exist.</h1>\n      <p>You may have mistyped the address or the page may have moved.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "docker/ruby/public/422.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n<head>\n  <title>The change you wanted was rejected (422)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/422.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>The change you wanted was rejected.</h1>\n      <p>Maybe you tried to change something you didn't have access to.</p>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "docker/ruby/public/500.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n<head>\n  <title>We're sorry, but something went wrong (500)</title>\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <style>\n  body {\n    background-color: #EFEFEF;\n    color: #2E2F30;\n    text-align: center;\n    font-family: arial, sans-serif;\n    margin: 0;\n  }\n\n  div.dialog {\n    width: 95%;\n    max-width: 33em;\n    margin: 4em auto 0;\n  }\n\n  div.dialog > div {\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #BBB;\n    border-top: #B00100 solid 4px;\n    border-top-left-radius: 9px;\n    border-top-right-radius: 9px;\n    background-color: white;\n    padding: 7px 12% 0;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n\n  h1 {\n    font-size: 100%;\n    color: #730E15;\n    line-height: 1.5em;\n  }\n\n  div.dialog > p {\n    margin: 0 0 1em;\n    padding: 1em;\n    background-color: #F7F7F7;\n    border: 1px solid #CCC;\n    border-right-color: #999;\n    border-left-color: #999;\n    border-bottom-color: #999;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    border-top-color: #DADADA;\n    color: #666;\n    box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);\n  }\n  </style>\n</head>\n\n<body>\n  <!-- This file lives in public/500.html -->\n  <div class=\"dialog\">\n    <div>\n      <h1>We're sorry, but something went wrong.</h1>\n    </div>\n    <p>If you are the application owner check the logs for more information.</p>\n  </div>\n</body>\n</html>\n"
  },
  {
    "path": "docker/ruby/public/robots.txt",
    "content": "# See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file\n#\n# To ban all spiders from the entire site uncomment the next two lines:\n# User-agent: *\n# Disallow: /\n"
  },
  {
    "path": "docker/ruby/test/controllers/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/controllers/welcome_controller_test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'test_helper'\n\nclass WelcomeControllerTest < ActionController::TestCase\n  # test \"the truth\" do\n  #   assert true\n  # end\nend\n"
  },
  {
    "path": "docker/ruby/test/controllers/widgets_controller_test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'test_helper'\n\nclass WidgetsControllerTest < ActionController::TestCase\n  setup do\n    @widget = widgets(:one)\n  end\n\n  test \"should get index\" do\n    get :index\n    assert_response :success\n  end\n\n  test \"should get new\" do\n    get :new\n    assert_response :success\n  end\n\n  test \"should create widget\" do\n    assert_difference('Widget.count') do\n      post :create,\n        params: {\n          widget: {\n            description: @widget.description,\n            name: @widget.name,\n            stock: @widget.stock\n          }\n        }\n    end\n\n    assert_redirected_to widget_path(@widget.id + 1)\n  end\n\n  test \"should show widget\" do\n    get :show, params: { id: @widget }\n    assert_response :success\n  end\n\n  test \"should get edit\" do\n    get :edit, params: { id: @widget }\n    assert_response :success\n  end\n\n  test \"should update widget\" do\n    patch :update,\n      params: {\n        id: @widget,\n        widget: {\n          description: @widget.description,\n          name: @widget.name,\n          stock: @widget.stock\n        }\n      }\n    assert_redirected_to widget_path(@widget)\n  end\n\n  test \"should destroy widget\" do\n    assert_difference('Widget.count', -1) do\n      delete :destroy, params: { id: @widget }\n    end\n\n    assert_redirected_to widgets_path\n  end\nend\n"
  },
  {
    "path": "docker/ruby/test/fixtures/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/fixtures/widgets.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html\n\none:\n  name: MyString\n  description: MyText\n  stock: 1\n\ntwo:\n  name: MyString\n  description: MyText\n  stock: 1\n"
  },
  {
    "path": "docker/ruby/test/helpers/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/helpers/welcome_helper_test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'test_helper'\n\nclass WelcomeHelperTest < ActionView::TestCase\nend\n"
  },
  {
    "path": "docker/ruby/test/helpers/widgets_helper_test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'test_helper'\n\nclass WidgetsHelperTest < ActionView::TestCase\nend\n"
  },
  {
    "path": "docker/ruby/test/integration/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/mailers/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/models/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/test/models/widget_test.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nrequire 'test_helper'\n\nclass WidgetTest < ActiveSupport::TestCase\n  # test \"the truth\" do\n  #   assert true\n  # end\nend\n"
  },
  {
    "path": "docker/ruby/test/test_helper.rb",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nENV['RAILS_ENV'] ||= 'test'\nrequire File.expand_path('../../config/environment', __FILE__)\nrequire 'rails/test_help'\n\nclass ActiveSupport::TestCase\n  # Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.\n  fixtures :all\n\n  # Add more helper methods to be used by all tests here...\nend\n"
  },
  {
    "path": "docker/ruby/vendor/assets/javascripts/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/vendor/assets/stylesheets/.keep",
    "content": ""
  },
  {
    "path": "docker/ruby/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-ruby\"\n\napp \"example-ruby\" {\n  labels = {\n    \"service\" = \"example-ruby\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {\n      static_environment = {\n        GEM_PATH = \"/layers/heroku_ruby/gems/vendor/bundle/ruby/2.6.0\"\n        PATH     = \"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:bin:/layers/heroku_ruby/gems/vendor/bundle/ruby/2.6.0/bin\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "docker/static/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM nginx:stable\n\nCOPY ./public/ /var/www\nCOPY ./nginx.conf /etc/nginx/conf.d/default.conf\n"
  },
  {
    "path": "docker/static/README.md",
    "content": "# Waypoint Static Website Example\n\n|Title|Description|\n|---|---|\n|Pack|Docker|\n|Cloud|Local|\n|Language|HTML|\n|Docs|[Docker](https://www.waypointproject.io/plugins/docker)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nA static HTML and CSS website that can be deployed with Docker.\n\nUses the `nginx` image configured to run on the default Waypoint port 3000."
  },
  {
    "path": "docker/static/nginx.conf",
    "content": "server {\n    listen 3000;\n    server_name _;\n\n    root /var/www/;\n    index index.html;\n\n    # Send all single page app paths to index.html\n    location / {\n        try_files $uri /index.html;\n    }\n}"
  },
  {
    "path": "docker/static/public/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Nginx Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint on Nginx.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>"
  },
  {
    "path": "docker/static/public/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/static/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"nginx-project-logsmaybe2\"\n\n# Labels can be specified for organizational purposes.\n# labels = { \"foo\" = \"bar\" }\n\n\napp \"web\" {\n  build {\n    use \"docker\" {\n    }\n  }\n\n  deploy {\n    use \"docker\" {\n    }\n  }\n}\n"
  },
  {
    "path": "docker/svelte/.gitignore",
    "content": "node_modules\npublic/build\n"
  },
  {
    "path": "docker/svelte/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM node:14-alpine\n\nWORKDIR /usr/src/app\n\nCOPY rollup.config.js ./\nCOPY package*.json ./\n\nRUN npm install\n\nCOPY ./src ./src\nCOPY ./public ./public\n\nRUN npm run-script build\n\nEXPOSE 5000\n\nENV HOST=0.0.0.0\n\nCMD [ \"npm\", \"start\" ]\n"
  },
  {
    "path": "docker/svelte/README.md",
    "content": "# Getting Started with Waypoint and Svelte\n\n1. Run `waypoint init` in this example directory with `waypoint.hcl`.\n1. Run `waypoint up` to build and deploy the application.\n\nFor more information on Svelte, see [https://svelte.dev](https://svelte.dev).\n"
  },
  {
    "path": "docker/svelte/package.json",
    "content": "{\n  \"name\": \"svelte-app\",\n  \"version\": \"1.0.0\",\n  \"scripts\": {\n    \"build\": \"rollup -c\",\n    \"dev\": \"rollup -c -w\",\n    \"start\": \"sirv public\"\n  },\n  \"devDependencies\": {\n    \"@rollup/plugin-commonjs\": \"^14.0.0\",\n    \"@rollup/plugin-node-resolve\": \"^8.0.0\",\n    \"rollup\": \"^2.3.4\",\n    \"rollup-plugin-livereload\": \"^2.0.0\",\n    \"rollup-plugin-svelte\": \"^6.0.0\",\n    \"rollup-plugin-terser\": \"^7.0.0\",\n    \"svelte\": \"^3.0.0\"\n  },\n  \"dependencies\": {\n    \"sirv-cli\": \"^1.0.0\"\n  }\n}\n"
  },
  {
    "path": "docker/svelte/public/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html lang=\"en\">\n<head>\n\t<meta charset='utf-8'>\n\t<meta name='viewport' content='width=device-width,initial-scale=1'>\n\n\t<link rel='stylesheet' href='/main.css'>\n\t<link rel='stylesheet' href='/build/bundle.css'>\n\t<script defer src='/build/bundle.js'></script>\n</head>\n\n<body>\n</body>\n</html>\n"
  },
  {
    "path": "docker/svelte/public/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "docker/svelte/rollup.config.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport svelte from 'rollup-plugin-svelte';\nimport resolve from '@rollup/plugin-node-resolve';\nimport commonjs from '@rollup/plugin-commonjs';\nimport livereload from 'rollup-plugin-livereload';\nimport { terser } from 'rollup-plugin-terser';\n\nconst production = !process.env.ROLLUP_WATCH;\n\nfunction serve() {\n\tlet server;\n\t\n\tfunction toExit() {\n\t\tif (server) server.kill(0);\n\t}\n\n\treturn {\n\t\twriteBundle() {\n\t\t\tif (server) return;\n\t\t\tserver = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {\n\t\t\t\tstdio: ['ignore', 'inherit', 'inherit'],\n\t\t\t\tshell: true\n\t\t\t});\n\n\t\t\tprocess.on('SIGTERM', toExit);\n\t\t\tprocess.on('exit', toExit);\n\t\t}\n\t};\n}\n\nexport default {\n\tinput: 'src/main.js',\n\toutput: {\n\t\tsourcemap: true,\n\t\tformat: 'iife',\n\t\tname: 'app',\n\t\tfile: 'public/build/bundle.js'\n\t},\n\tplugins: [\n\t\tsvelte({\n\t\t\t// enable run-time checks when not in production\n\t\t\tdev: !production,\n\t\t\t// we'll extract any component CSS out into\n\t\t\t// a separate file - better for performance\n\t\t\tcss: css => {\n\t\t\t\tcss.write('bundle.css');\n\t\t\t}\n\t\t}),\n\n\t\t// If you have external dependencies installed from\n\t\t// npm, you'll most likely need these plugins. In\n\t\t// some cases you'll need additional configuration -\n\t\t// consult the documentation for details:\n\t\t// https://github.com/rollup/plugins/tree/master/packages/commonjs\n\t\tresolve({\n\t\t\tbrowser: true,\n\t\t\tdedupe: ['svelte']\n\t\t}),\n\t\tcommonjs(),\n\n\t\t// In dev mode, call `npm run start` once\n\t\t// the bundle has been generated\n\t\t!production && serve(),\n\n\t\t// Watch the `public` directory and refresh the\n\t\t// browser on changes when not in production\n\t\t!production && livereload('public'),\n\n\t\t// If we're building for production (npm run build\n\t\t// instead of npm run dev), minify\n\t\tproduction && terser()\n\t],\n\twatch: {\n\t\tclearScreen: false\n\t}\n};\n"
  },
  {
    "path": "docker/svelte/src/App.svelte",
    "content": "<script>\n    import Index from './views/Index.svelte'\n</script>\n\n<svelte:head>\n    <title>Waypoint Svelte Demo</title>\n</svelte:head>\n\n<Index />\n"
  },
  {
    "path": "docker/svelte/src/main.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nimport App from './App.svelte';\n\nconst app = new App({\n\ttarget: document.body,\n});\n\nexport default app;\n"
  },
  {
    "path": "docker/svelte/src/views/Index.svelte",
    "content": "<main>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img class=\"language-image\" src=\"/language.svg\" alt=\"Svelte Icon\" />\n        </div>\n        <h1>This Svelte app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n</main>\n"
  },
  {
    "path": "docker/svelte/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"example-svelte\"\n\napp \"example-svelte\" {\n  labels = {\n    \"service\" = \"example-svelte\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"docker\" {}\n  }\n\n  deploy {\n    use \"docker\" {\n      service_port = 5000\n    }\n  }\n}\n\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/README.md",
    "content": "# Waypoint Google Cloud Run Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Google Cloud|\n|Language|NodeJS|\n|Docs|[Google Cloud Run](https://www.waypointproject.io/plugins/google-cloud-run)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/google-cloud-run)|\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n\n<head>\n  <% include ../partials/header.ejs %>\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n      </div>\n      <h1>This Node.js app was deployed with Waypoint.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "gcp/google-cloud-run/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"gcp-nodejs\"\n\napp \"gcp-nodejs-web\" {\n  labels = {\n    \"service\" = \"gcp-nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n\n    registry {\n      use \"docker\" {\n        image = \"gcr.io/<my-project-id>/example-nodejs\"\n        tag   = \"latest\"\n      }\n    }\n  }\n\n  deploy {\n    use \"google-cloud-run\" {\n      project  = \"<my-project-id>\"\n      location = \"us-east1\"\n\n      port = 5000\n\n      static_environment = {\n        \"NAME\" : \"World\"\n      }\n\n      capacity {\n        memory                     = 128\n        cpu_count                  = 1\n        max_requests_per_container = 10\n        request_timeout            = 300\n      }\n\n      auto_scaling {\n        max = 2\n      }\n    }\n  }\n\n  release {\n    use \"google-cloud-run\" {}\n  }\n}"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/.gitignore",
    "content": "# Node build artifacts\nnode_modules\nnpm-debug.log\n\n# Local development\n*.env\n*.dev\n.DS_Store\n\n# Docker\nDockerfile\ndocker-compose.yml\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/Procfile",
    "content": "web: node index.js\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/README.md",
    "content": "# Waypoint AWS-EKS Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|AWS|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nRequirements:\n\n- You must create an ECR registry named `waypoint-example` (or choose your own name and edit `waypoint.hcl`).\n- Create an EKS cluster as shown at [HashiCorp Learn](https://learn.hashicorp.com/tutorials/terraform/eks?in=terraform/kubernetes).\n- Configure `kubectl` to communicate to the Kubernetes cluster (also covered in the tutorial above).\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/aws-eks/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-eks-nodejs\"\n\napp \"eks-nodejs-web\" {\n  labels = {\n    \"service\" = \"eks-nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"aws-ecr\" {\n        region     = \"us-east-1\"\n        repository = \"eks-nodejs-web\"\n        tag        = \"latest\"\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      load_balancer = true\n      port          = 80\n    }\n  }\n}"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/README.md",
    "content": "# Exec Plugin Example with kubectl apply\n\nA Node.js app packaged with Buildpacks and deployed with Kubernetes.\n\nRather than using the standard Waypoint `kubernetes` plugin that creates a\nDeployment and Service with a single port, this example uses the [`exec`\nplugin](https://www.waypointproject.io/plugins/exec#examples) to execute\n`kubectl apply -f` with a templated file. This approach may be helpful when you\nwant to control precisely which Kubernetes resources are created such as a\nStatefulSet, an app with multiple ports, or similar levels of Kubernetes\ncustomizations.\n\nThis approach is very flexible, yet does have some downsides such as not\nactually implementing the `waypoint destroy` command, which means resources must\nbe cleaned up separately. \n\nReference `waypoint.hcl` and `example-nodejs-exec.yml` to see how it works. Note\nthe `{{.Input.DockerImageFull}}` and the loop for passing through the\nEnvironment Variables to the Kubernetes Deployment:\n\n```\n{{range $key, $value := .Env}}\n          - name: {{$key}}\n            value: \"{{$value}}\"{{end}}\n```\n\nAn alternative access syntax for .Env if you know the keys is:\n```\n{{index .Env \"WAYPOINT_CEB_INVITE_TOKEN\"}}\n{{index .Env \"WAYPOINT_DEPLOYMENT_ID\"}}\n{{index .Env \"WAYPOINT_SERVER_ADDR\"}}\n{{index .Env \"WAYPOINT_SERVER_TLS\"}}\n{{index .Env \"WAYPOINT_SERVER_TLS_SKIP_VERIFY\"}}\n```\n\nNote that the Waypoint workspace name will be used to create a Kubernetes\nnamespace of the same name with `{{.Workspace}}` syntax to retrieve the \nname in the template.\n\n## Deployment steps\n1. `waypoint init`\n1. `waypoint up`\n1. Validate that the app is available at the Deployment URL\n1. Validate that k8s resources were deployed: `kubectl get deployment.apps/example-nodejs-exec service/example-nodejs-exec -n YOUR_NAMESPACE`\n\n## Cleanup\n1. `waypoint destroy`\n1. Run `kubectl delete deployment.apps/example-nodejs-exec service/example-nodejs-exec -n YOUR_NAMESPACE`\n\nIf you used a non-default Workspace, then you may want to also delete the\nworkspace.\n1. Run `kubectl delete namespaces YOUR_NAMESPACE`\n\n## Example output\n```\n$ waypoint up\n\n» Building...\nCreating new buildpack-based image using builder: heroku/buildpacks:18\n✓ Creating pack client\n✓ Building image\n │ [exporter] Adding 1/1 app layer(s)\n │ [exporter] Reusing layer 'launcher'\n │ [exporter] Reusing layer 'config'\n │ [exporter] Adding label 'io.buildpacks.lifecycle.metadata'\n │ [exporter] Adding label 'io.buildpacks.build.metadata'\n │ [exporter] Adding label 'io.buildpacks.project.metadata'\n │ [exporter] *** Images (aa6a41914ac8):\n │ [exporter]       index.docker.io/library/example-nodejs-exec:latest\n │ [exporter] Reusing cache layer 'heroku/nodejs-engine:nodejs'\n │ [exporter] Reusing cache layer 'heroku/nodejs-engine:toolbox'\n✓ Injecting entrypoint binary to image\n\nGenerated new Docker image: example-nodejs-exec:latest\n✓ Tagging Docker image: example-nodejs-exec:latest => example-nodejs-exec:1\n\n» Deploying...\n✓ Rendering templates...\n✓ Executing command: kubectl apply -f /var/folders/3f/pgsg1xp16rx2l9hqnqs8ft1h0000gp/T/waypoint-exec344460138/example-nodejs-exec.yml\n │ deployment.apps/example-nodejs-exec configured\n │ service/example-nodejs-exec unchanged\n\n» Releasing...\n\nThe deploy was successful! A Waypoint deployment URL is shown below. This\ncan be used internally to check your deployment and is not meant for external\ntraffic. You can manage this hostname using \"waypoint hostname.\"\n\n           URL: https://rationally-helped-antelope.waypoint.run\nDeployment URL: https://rationally-helped-antelope--v1.waypoint.run\n```\n\n"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/example-nodejs-exec.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\napiVersion: v1\nkind: Namespace\nmetadata:\n  name: {{.Workspace}}\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: example-nodejs-exec\n  namespace: {{.Workspace}}\nspec:\n  selector:\n    matchLabels:\n      app: example-nodejs-exec\n  replicas: 2\n  template:\n    metadata:\n      labels:\n        app: example-nodejs-exec\n    spec:\n      containers:\n      - name: example-nodejs-exec\n        image: {{.Input.DockerImageFull}}\n        ports:\n        - containerPort: 5000\n        env:\n          - name: WAYPOINT_ALT_TOKEN_EXAMPLE\n            value: \"{{index .Env \"WAYPOINT_CEB_INVITE_TOKEN\"}}\"{{range $key, $value := .Env}}\n          - name: {{$key}}\n            value: \"{{$value}}\"{{end}}\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: example-nodejs-exec\n  namespace: {{.Workspace}}\nspec:\n  externalTrafficPolicy: Cluster\n  ports:\n  - name: http\n    port: 5000\n    protocol: TCP\n    targetPort: 5000\n  selector:\n    app: example-nodejs-exec\n  sessionAffinity: None\n  type: LoadBalancer"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/output.txt",
    "content": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: example-nodejs\nspec:\n  selector:\n    matchLabels:\n      app: example-nodejs\n  replicas: 2\n  template:\n    metadata:\n      labels:\n        app: example-nodejs\n    spec:\n      containers:\n      - name: example-nodejs\n        image: nodejs-example:1\n        ports:\n        - containerPort: 5000\n      - env:\n        - name: WAYPOINT_CEB_INVITE_TOKEN\n          value: \"4RmBPBvZ1DkcuTAxAonjfk9VPncyHpKC4p76iD1BZZKKQ8n7FeeFvWnkN9sWkmHf9SNKBShwi9XTEFz4uSpKapkhs6sCM5Z4qyUBF4SFbcf6CrKYxVwLnmQxonBDY787gqGzebFKJR8YbKXubEM6\"\n        - name: WAYPOINT_DEPLOYMENT_ID\n          value: \"01EMFZMHNBGWF66A7D4MFGENSR\"\n        - name: WAYPOINT_SERVER_ADDR\n          value: \"waypoint:9701\"\n        - name: WAYPOINT_SERVER_TLS\n          value: \"1\"\n        - name: WAYPOINT_SERVER_TLS_SKIP_VERIFY\n          value: \"1\""
  },
  {
    "path": "kubernetes/exec-kubectl-apply/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/exec-kubectl-apply/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-exec\"\n\napp \"nodejs-exec\" {\n  labels = {\n    \"service\" = \"nodejs-exec\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-exec\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"exec\" {\n      # note \"<TPL>\" means replace this with the path to\n      # the templated file post-rendering\n      command = [\"kubectl\", \"apply\", \"-f\", \"<TPL>\"]\n\n      # this file has go template syntax for {{.Input.DockerImageFull}} and\n      # {{.Env}} environment variables\n      template {\n        path = \"./example-nodejs-exec.yml\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/go/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n#--------------------------------------------------------------------\n# builder\n#--------------------------------------------------------------------\n\nFROM golang:1.18-alpine AS builder\n\nWORKDIR /app-src\n\nCOPY go.mod ./\n\nRUN go mod download\n\nCOPY . ./\n\nRUN GOOS=linux GOARCH=amd64 go build -tags netgo -ldflags=\"-w -s\" -o /tmp/go-k8s \n\n#--------------------------------------------------------------------\n# final image\n#--------------------------------------------------------------------\n\nFROM scratch\n\nCOPY --from=builder /tmp/go-k8s /go-k8s\nCOPY --from=builder /app-src/static /static\n\n\nCMD [ \"/go-k8s\" ]\n"
  },
  {
    "path": "kubernetes/go/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                              |\n| -------- | ---------------------------------------------------------------------------------------- |\n| Pack     | Docker                                                                                   |\n| Cloud    | Kubernetes                                                                               |\n| Language | Go                                                                                       |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/kubernetes)                              |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes) |\n\nA barebones Go API, with a quick minimal docker build, deployed to Kubernetes.\n"
  },
  {
    "path": "kubernetes/go/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/kubernetes/go\n\ngo 1.18\n"
  },
  {
    "path": "kubernetes/go/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "kubernetes/go/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"go-k8s\"\n\napp \"go-k8s\" {\n  labels = {\n    \"service\" = \"go-k8s\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"docker\" {}\n    registry {\n      use \"docker\" {\n        # Replace with your docker image name (i.e. registry.hub.docker.com/library/go-k8s)\n        image = \"your-image-here\"\n        tag = gitrefpretty()\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n      service_port = 3000\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      load_balancer = true\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/go-gitops/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                          |\n| -------- | ------------------------------------------------------------------------------------ |\n| Pack     | Cloud Native Buildpack                                                               |\n| Cloud    | Local                                                                                |\n| Language | Go                                                                                   |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                              |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker) |\n\nA barebones Go API, which can easily be deployed by Waypoint.\n\nThis example assumes you will be deploying the application onto Kubernetes.\nIt also uses a remote container registry jFrog. You'll need\nto change the image value to point at your own registry. And be sure to setup\nyour local Kubernetes cluster to have credentials to pull the image.\n\nThis example also allows users to pull registry information out of Vault. For\ndefault values of a registry username and password, Waypoint can use its\ndynamic config sourcer plugin to obtain these values rather than requiring that\nthey be set on the CLI or UI or checked into Git in a `waypoint.hcl`.\n\nIf you wish to use Vault for configuring defaults, you may run the following\nvault command to set up the secrets inside your Vault server:\n\n```\nvault kv put secret/registry registry_username=USERNAME registry_password=PASSWORD\n```\n\nWe'll need to update Waypoint to ensure the Vault dynamic config sourcer plugin\nhas the proper hostname and root token to access Vault:\n\n```\nwaypoint config source-set -type=vault -config=addr=<Vault address> -config=token=<Vault token>\n```\n\nThen, assuming your pod in Kubernetes can access Vault, when Waypoint goes to\nevaluate your input variables, it will use Vault to fill out these values.\n"
  },
  {
    "path": "kubernetes/go-gitops/go.mod",
    "content": "module github.com/briancain/go-gitops\n\n// +heroku goVersion go1.17\ngo 1.17\n"
  },
  {
    "path": "kubernetes/go-gitops/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "kubernetes/go-gitops/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go-gitops/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go-gitops/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-go-gitops-0\"\n\nvariable \"image\" {\n  default     = \"your.own.container.registry.example.com/go\"\n  type        = string\n  description = \"Image name for the built image in the Docker registry.\"\n}\n\nvariable \"tag\" {\n  default     = \"latest\"\n  type        = string\n  description = \"Image tag for the image\"\n}\n\nvariable \"registry_username\" {\n  default = dynamic(\"vault\", {\n    path = \"config/data/secret/registry\"\n    key  = \"data/registry_username\"\n  })\n  type        = string\n  sensitive   = true\n  description = \"username for container registry\"\n}\n\nvariable \"registry_password\" {\n  default = dynamic(\"vault\", {\n    path = \"config/data/secret/registry\"\n    key  = \"data/registry_password\"\n  })\n  type        = string\n  sensitive   = true\n  description = \"password for registry\" // DO NOT COMMIT YOUR PASSWORD TO GIT\n}\n\nvariable \"regcred_secret\" {\n  default     = \"regcred\"\n  type        = string\n  description = \"The existing secret name inside Kubernetes for authenticating to the container registry\"\n}\n\napp \"go-gitops\" {\n  build {\n    use \"pack\" {}\n\n    registry {\n      use \"docker\" {\n        image    = var.image\n        tag      = var.tag\n        username = var.registry_username\n        password = var.registry_password\n        local    = false\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path   = \"/\"\n      image_secret = var.regcred_secret\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      load_balancer = true\n      port          = 3000\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/.gitignore",
    "content": ".DS_Store\ndata.db\n\n# Local .waypoint directories\n**/.waypoint/*\n\n# Local .terraform directories\n**/.terraform/*\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# Crash log files\ncrash.log\n\n# Ignore any .tfvars files that are generated automatically for each Terraform run. Most\n# .tfvars files are managed as part of configuration and so should be included in\n# version control.\n#\n# example.tfvars\n\n# Ignore override files as they are usually used to override resources locally and so\n# are not checked in\noverride.tf\noverride.tf.json\n*_override.tf\n*_override.tf.json\n\n# Include override files you do wish to add to version control using negated pattern\n#\n# !example_override.tf\n\n# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan\n# example: *tfplan*"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/README.md",
    "content": "# Waypoint Kubernetes Example with Multiple Apps and Ingress\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|Golang|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n\nWaypoint can deploy to a local Kubernetes server or a cloud-hosted cluster. See the tutorial for details.\n\nNote that an ingress controller is required prior to deploying applications.\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/app-one/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        This is the first applications website!!\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/app-one/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/app-two/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        This is the second applications site!!\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/app-two/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/go.mod",
    "content": "module github.com/briancain/waypoint-k8s-ingress\n\n// +heroku goVersion go1.17\ngo 1.17\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\thttp.Handle(\"/app-one\", http.StripPrefix(\"/app-one\", http.FileServer(http.Dir(\"./app-one\"))))\n\n\thttp.Handle(\"/app-two\", http.StripPrefix(\"/app-two\", http.FileServer(http.Dir(\"./app-two\"))))\n\n\thttp.Handle(\"/\", http.FileServer(http.Dir(\"./static\")))\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go-multiapp-ingress/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-go-multiapp-k8s-ingress\"\n\nvariable \"namespace\" {\n  default     = \"ingress-nginx\"\n  type        = string\n  description = \"The namespace to deploy and release to in your Kubernetes cluster.\"\n}\n\napp \"go-multiapp-one\" {\n  labels = {\n    \"service\" = \"go-multiapp-one\",\n    \"env\"     = \"dev\"\n  }\n\n  config {\n    env = {\n      WP_NODE = \"ONE\"\n    }\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"go-multiapp-one\"\n        tag   = \"1\"\n        local = false\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n      namespace  = var.namespace\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      namespace = var.namespace\n\n      ingress \"http\" {\n        path_type = \"Prefix\"\n        path      = \"/app-one\"\n      }\n    }\n  }\n\n}\n\n\napp \"go-multiapp-two\" {\n  labels = {\n    \"service\" = \"go-multiapp-two\",\n    \"env\"     = \"dev\"\n  }\n\n  config {\n    env = {\n      WP_NODE = \"TWO\"\n    }\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"go-multiapp-two\"\n        tag   = \"1\"\n        local = false\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n      namespace  = var.namespace\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      namespace = var.namespace\n\n      ingress \"http\" {\n        path_type = \"Prefix\"\n        path      = \"/app-two\"\n      }\n    }\n  }\n}\n\napp \"default-app\" {\n  labels = {\n    \"service\" = \"default-app\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"default-app\"\n        tag   = \"1\"\n        local = false\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n      namespace  = var.namespace\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      namespace = var.namespace\n\n      ingress \"http\" {\n        default   = true\n        path_type = \"Prefix\"\n        path      = \"/\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n#--------------------------------------------------------------------\n# builder\n#--------------------------------------------------------------------\n\nFROM golang:1.17.2-alpine3.14 AS builder\n\nWORKDIR /app-src\n\nCOPY go.mod ./\nCOPY go.sum ./\n\nRUN go mod download\n\nCOPY . ./\n\nRUN go build -o /tmp/go-multiworkspace \n\n#--------------------------------------------------------------------\n# final image\n#--------------------------------------------------------------------\n\nFROM alpine:3.14\n\n# Config is expected to be delivered here at runtime\nRUN mkdir /opt/config\n\nCOPY --from=builder /tmp/go-multiworkspace /go-multiworkspace\n\nCMD [ \"/go-multiworkspace\" ]\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/README.md",
    "content": "# Waypoint Multi-Workspace example (in go)\n\n| Title    | Description                                                                          |\n| -------- | ------------------------------------------------------------------------------------ |\n| Pack     | Docker                                                                               |\n| Cloud    | Kubernetes/AWS                                                                       |\n| Language | Go                                                                                   |\n| Tutorial | coming soon                                                                          |\n\nThis is a complex example showing how workspaces can be used to model dev and prod environments, where dev and prod have different namespaces, different config (sourced from vault), and different load balancers, with only the prod load balancer public.\n\n\n## Prerequisites\n### Kubernetes namespaces\n\nYou should have namespaces in your k8s cluster named `dev` and `prod`. These names are used in the waypoint.hcl.\n\n### Waypoint installation\n\nWaypoint will need to be installed in such a way that it can access the dev and prod k8s namespaces. This is most easily accomplished by installing Waypoint with the [helm chart](https://www.Waypointproject.io/docs/kubernetes/helm-deploy).\n\n### Vault setup\n\nA Vault cluster is required. Its api address must be reachable from pods in your dev and prod namespaces. The best way to set this up is by configuring the [Vault Kubernetes auth method](https://www.vaultproject.io/docs/auth/kubernetes), and the Waypoint Vault config sourcer using [Kubernetes auth](https://www.Waypointproject.io/plugins/vault#kubernetes_role).\n\nThis also presumes that dev and prod exist in Vault under a KV secrets engine named `config`, with the path `gomultiapp/{dev,prod}/config.yml`\n\nThis has been tested with an [HCP Vault](https://cloud.hashicorp.com/#vault) cluster peered to the AWS VPC that contains the EKS cluster.\n\n### AWS setup\n\nThis project uses the AWS ECR container registry, AWS loadbalancers, and has been tested on EKS. To support gitops workflows, Waypoint runners need push access to ECR - this can be accomplished by adding the `AmazonEc2ContainerRegistryFullAccess` policy to the EKS node group role, but more granular access is also possible.\n\n\n## Dev and Prod Environments\n\nIn this example, the dev environment is represented by the \"default\" Waypoint workspace, and prod by the \"prod\" workspace.\n\nTo deploy to dev:\n\n```shell-session\n$ waypoint up\n```\n\nTo interact with the prod environment, add the `-workspace=prod` flag to any Waypoint command. After verifying changes in dev,\nthey can be deployed to prod with:\n\n```shell-session\n$ waypoint up -workspace=prod\n```\n\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/config.yml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nhello_message: \"hello from local\"\nport: 8080\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/go.mod",
    "content": "module go-multiworkspace\n\ngo 1.16\n\nrequire gopkg.in/yaml.v2 v2.4.0\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/go.sum",
    "content": "gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=\ngopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=\ngopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=\ngopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"gopkg.in/yaml.v2\"\n)\n\nconst CONFIG_PATH_KEY = \"CONFIG_PATH\"\n\n\ntype config struct {\n\tHelloMessage string `yaml:\"hello_message\"`\n\tPort int `yaml:\"port\"`\n}\n\nfunc loadConfig() (*config, error) {\n\n\tconfigPath := os.Getenv(CONFIG_PATH_KEY)\n\tif configPath == \"\" {\n\t\treturn nil, fmt.Errorf(\"%s not set\", CONFIG_PATH_KEY)\n\t}\n\tconfigFile, err := ioutil.ReadFile(configPath)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tvar c config\n\tif err := yaml.Unmarshal(configFile, &c); err != nil {\n\t\treturn nil, fmt.Errorf(\"failed parsing config: %s\", err)\n\t}\n\n\treturn &c, nil\n}\n\nfunc main() {\n\tcfg, err := loadConfig()\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\n\thttp.HandleFunc(\"/health\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"healthy\\n\"))\n\t\treturn\n\t})\n\n\thttp.HandleFunc(\"/hello\", func(w http.ResponseWriter, r *http.Request) {\n\t\tlog.Printf(\"Hello request from Addr: %s, Host: %s\", r.RemoteAddr, r.Host)\n\t\tw.Write([]byte(fmt.Sprintf(\"Here is today's message: %q\\n\", cfg.HelloMessage)))\n\t\treturn\n\t})\n\n\t// Apply default port if necessary\n\tvar port int\n\tif cfg.Port != 0 {\n\t\tport = cfg.Port\n\t} else {\n\t\tport = 8080\n\t\tlog.Printf(\"Defaulting to port %d\", port)\n\t}\n\n\tserveAddr := fmt.Sprintf(\":%d\", port)\n\tlog.Printf(\"Starting server at: %s\\n\", serveAddr)\n\tif err := http.ListenAndServe(serveAddr, nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "kubernetes/go-multiworkspace/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-go-multiworkspace\"\n\napp \"backend\" {\n\n  config {\n    env = {\n      \"CONFIG_PATH\" = \"/opt/config/config.yml\"\n    }\n\n    workspace \"default\" {\n      file = {\n        \"/opt/config/config.yml\" = configdynamic(\"vault\", {\n          path = \"config/data/go-multiworkspace/dev\"\n          key  = \"data/config.yml\"\n        })\n      }\n    }\n\n    workspace \"prod\" {\n      file = {\n        \"/opt/config/config.yml\" = configdynamic(\"vault\", {\n          path = \"config/data/go-multiworkspace/prod\"\n          key  = \"data/config.yml\"\n        })\n      }\n    }\n  }\n\n  build {\n    use \"docker\" {}\n    registry {\n      use \"aws-ecr\" {\n        region     = \"us-east-2\"\n        repository = \"acmecorp\"\n        tag        = gitrefpretty()\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n\n      # Use the dev kubernetes namespace with the dev workspace, and prod with prod.\n      # Error on any other workspace.\n      namespace = {\n        \"default\"  = \"dev\"\n        \"prod\" = \"prod\"\n      }[workspace.name]\n\n      probe_path = \"/health\"\n\n      service_account = \"go-multiworkspace\"\n      service_port = 8080\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n\n      # Use the dev kubernetes namespace with the dev workspace, and prod with prod.\n      # Error on any other workspace.\n      namespace = {\n        \"default\"  = \"dev\"\n        \"prod\" = \"prod\"\n      }[workspace.name]\n\n      load_balancer = true\n\n      annotations = {\n\n        # Assign an internal load balancer in dev, and external in prod\n        \"service.beta.kubernetes.io/aws-load-balancer-internal\" = {\n          \"default\"  = \"true\"\n          \"prod\" = \"false\"\n        }[workspace.name]\n\n        #        # Use the correct cert for the workspace\n        #        \"service.beta.kubernetes.io/aws-load-balancer-ssl-cert\" = {\n        #          \"dev\"  = \"dev-cert-arn\"\n        #          \"prod\" = \"prod-cert-arn\"\n        #        }[workspace.name] \n\n      }\n    }\n  }\n}\n\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\n#--------------------------------------------------------------------\n# builder\n#--------------------------------------------------------------------\n\nFROM golang:1.18-alpine AS builder\n\nWORKDIR /app-src\n\nCOPY go.mod ./\n\nRUN go mod download\n\nCOPY . ./\n\nRUN GOOS=linux GOARCH=amd64 go build -tags netgo -ldflags=\"-w -s\" -o /tmp/go-k8s \n\n#--------------------------------------------------------------------\n# final image\n#--------------------------------------------------------------------\n\nFROM scratch\n\nCOPY --from=builder /tmp/go-k8s /go-k8s\nCOPY --from=builder /app-src/static /static\n\n\nCMD [ \"/go-k8s\" ]\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/README.md",
    "content": "# Waypoint Go Example with Docker and Docker Pull\n\n| Title    | Description                                                                              |\n| -------- | ---------------------------------------------------------------------------------------- |\n| Pack     | Docker, Docker Pull                                                                      |\n| Cloud    | Kubernetes                                                                               |\n| Language | Go                                                                                       |\n| Docs     | [Kubernetes](https://www.waypointproject.io/plugins/kubernetes)                          |\n\nA barebones Go API, with a quick minimal docker build, deployed to Kubernetes.\n\nThis example demonstrates using the `docker-pull` plugin, to pull the image\nbuild in a non-production build/release, and use it for a production deployment. \n\nThe included `waypoint.hcl` file contains several variables with defaults, but\nusers will need to supply their own registry credentials. It is not recommended\nto include credentials in the `waypoint.hcl` file itself, instead an easy way to\ntry this example would be to create a local `wpvars` files and use them when\nrunning `waypoint` commands. Technically users could use the same registry,\ncredentials, and image for this example, so long as the tag value changes\nbetween production and development to ensure `dev` and `prod` workspaces aren't\npushing and pulling to the same image. \n\n### Example: Creating a development build\n\nCreate the initial development build using the `dev.wpvars` file like so:\n\n```\n# dev.wpvars \n// push to the dev registry\npush_image=\"dev-registry-url/example-go-pull\"\npush_registry_username=\"developer\"\npush_registry_password=\"some password\"\n```\n\nThen execute a `waypoint build`, referencing the file:\n\n```\n$ waypoint build -var-file=dev.wpvars\n\n» Building go-k8s...\n  Performing operation on \"kubernetes\" with runner profile \"01GGACDWSQZ1BR3TNR8EW0KY1A\"\n\n» Cloning data from Git\n  URL: https://github.com/hashicorp/waypoint-examples.git\n  Ref: go-workspace-pull\n\n» Downloading from Git\n  Git Commit: a59c6a6a518bc22259db35cc0ba02b1dd56d4483\n   Timestamp: 2022-10-28 17:19:00 +0000 UTC\n     Message: more updates\n\n✓ Running build v17\n✓ Building Docker image with kaniko...\n✓ Testing registry and uploading entrypoint layer\n✓ Executing kaniko...\n │ INFO[0012] Executing 0 build triggers\n │ INFO[0012] Unpacking rootfs as cmd COPY --from=builder /tmp/go-k8s /go-k8s requi\n │ res it.\n │ INFO[0012] COPY --from=builder /tmp/go-k8s /go-k8s\n │ INFO[0012] Taking snapshot of files...\n │ INFO[0012] COPY --from=builder /app-src/static /static\n │ INFO[0012] Taking snapshot of files...\n │ INFO[0012] CMD [ \"/go-k8s\" ]\n │ INFO[0012] Pushing image to localhost:37809/catsby/example-go-pull:dev\n │ INFO[0014] Pushed image to 1 destinations\n✓ Image pushed to 'catsby/example-go-pull:dev'\n✓ Running push build v16\n\nCreated artifact v16\n\n» Variables used:\n         VARIABLE        |                     VALUE                     |   TYPE    | SOURCE\n-------------------------+-----------------------------------------------+-----------+----------\n  pull_registry_password | b1f991bfcaf3ab4dc9383bae461e2b9ce331103bb55a0 | sensitive | default\n                         | 63d66c378a40980c817                           |           |\n  pull_registry_username | 890e8f907513987332a9679089def709997ac359a11e8 | sensitive | default\n                         | e378c0810e9eac12e16                           |           |\n  pull_tag               | dev                                           | string    | default\n  push_registry_password | 122bc444b708853582dafe3cda069461b2a2c6ebce9a9 | sensitive | file\n                         | d38aee531a98d6d3d03                           |           |\n  push_registry_username | 890e8f907513987332a9679089def709997ac359a11e8 | sensitive | file\n                         | e378c0810e9eac12e16                           |           |\n  push_tag               | dev                                           | string    | default\n  port                   |                                          3000 | int       | default\n  pull_image             | catsby/example-go-pull                        | string    | default\n  push_image             | catsby/example-go-pull                        | string    | file\n```\n\nThis will create the first docker image and push it up to the registry defined in the `dev.wpvars` file.\n\nSpecifically note that:\n\n - The output from Kaniko demonstrates actually building the container image\n - the `SOURCE` for the `push_` variables are read from file\n - the `SOURCE` for the `pull_` variables use the defaults because they were not overriden in the `dev.wpvars` file\n\n### Example: Creating a production build\n\nUsers can then use the dev image with the `docker-pull` plugin by using another\nwpvars file, `prod.wpvars`, which adds the `pull_` variables and changes the\n`push_` variables. In this example, the values use for `push_` variables in\n`dev.wpvars` are now the values used for the `pull_` variable values, and new\n`push_` values are added in the `prod.wpvars` file. Technically they could be\nthe same values for both, as the `push_tag` and `pull_tag` are not overridden in\neither wpvar files and are coded in the `waypoint.hcl` file. This was done to\nensure default workspace builds push with the `dev` tag and production workspace\nbuilds pull with the `dev` tag and push with the `latest` tag.\n\n```\n# prod.wpvars \n// pull from the dev registry\npull_image=\"dev-registry-url/example-go-pull\"\npull_registry_username=\"developer\"\npull_registry_password=\"some password\"\n\n// push to the prod registry\npush_image=\"prov-registry-url/example-go-pull\"\npush_registry_username=\"releaser\"\npush_registry_password=\"some password\"\n```\n\nRun a production build with `waypoint build`, referencing the prod wpvars file:\n\n```\n$ waypoint build -workspace=production -var-file=prod.wpvars\n\n» Building go-k8s...\n  Performing operation on \"kubernetes\" with runner profile \"01GGACDWSQZ1BR3TNR8EW0KY1A\"\n\n» Cloning data from Git\n         URL: https://github.com/hashicorp/waypoint-examples.git\n         Ref: go-workspace-pull\n  Git Commit: a59c6a6a518bc22259db35cc0ba02b1dd56d4483\n   Timestamp: 2022-10-28 17:19:00 +0000 UTC\n     Message: more updates\n\n✓ Running build v18\n✓ Injecting entrypoint...\n⠋ Executing Kaniko...\n │ INFO[0000] Retrieving image manifest localhost:33775/catsby/example-go-pull:dev\n │ INFO[0000] Retrieving image localhost:33775/catsby/example-go-pull:dev from regi\n │ stry localhost:33775\n │ INFO[0000] Built cross stage deps: map[]\n │ INFO[0000] Retrieving image manifest localhost:33775/catsby/example-go-pull:dev\n │ INFO[0000] Returning cached image manifest\n │ INFO[0000] Executing 0 build triggers\n │ INFO[0000] Skipping unpacking as no commands require it.\n │ INFO[0000] Pushing image to localhost:45983/catsby/example-go-pull:latest\n │ INFO[0001] Pushed image to 1 destinations\n✓ Image pull completed.\n✓ Running push build v17\n\nCreated artifact v17\n\n» Variables used:\n         VARIABLE        |                     VALUE                     |   TYPE    | SOURCE\n-------------------------+-----------------------------------------------+-----------+----------\n  pull_registry_password | 122bc444b708853582dafe3cda069461b2a2c6ebce9a9 | sensitive | file\n                         | d38aee531a98d6d3d03                           |           |\n  pull_tag               | dev                                           | string    | default\n  push_image             | catsby/example-go-pull                        | string    | file\n  push_registry_username | 890e8f907513987332a9679089def709997ac359a11e8 | sensitive | file\n                         | e378c0810e9eac12e16                           |           |\n  push_tag               | latest                                        | string    | default\n  port                   |                                          3030 | int       | default\n  pull_image             | catsby/example-go-pull                        | string    | file\n  pull_registry_username | 890e8f907513987332a9679089def709997ac359a11e8 | sensitive | file\n                         | e378c0810e9eac12e16                           |           |\n  push_registry_password | 122bc444b708853582dafe3cda069461b2a2c6ebce9a9 | sensitive | file\n                         | d38aee531a98d6d3d03                           |           |\n```\n\nThat command will pull the image tagged as `dev` from the registry used in the first `build` operation \nand push it to the prod registry with the `latest` tag. \n\nSpecifically note that:\n\n - The output from Kaniko demonstrates simply pulling the image \n - the `SOURCE` for the `push_` and `pull_` variables are read from file\n - In `prod.wpvars` the `pull_` values should match the `push_` values from `dev.wpvars`\n\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/kubernetes/go\n\ngo 1.18\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "kubernetes/go-workspace-pull/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"go-k8s\"\n\napp \"go-k8s\" {\n  labels = {\n    \"service\" = \"go-k8s\",\n    \"env\" = {\n      \"default\"    = \"dev\"\n      \"production\" = \"latest\"\n    }[workspace.name]\n  }\n\n  build {\n    // by default, build the Dockerfile\n    use \"docker\" {}\n\n    // in production, pull the latest \"dev\" image\n    workspace \"production\" {\n      use \"docker-pull\" {\n        image = var.pull_image\n        tag   = var.pull_tag\n        auth {\n          username = var.pull_registry_username\n          password = var.pull_registry_password\n        }\n      }\n    }\n\n    registry {\n      use \"docker\" {\n        image = var.push_image\n        tag   = var.push_tag\n        auth {\n          username = var.push_registry_username\n          password = var.push_registry_password\n        }\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path   = \"/\"\n      service_port = 3000\n      annotations  = labels\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      load_balancer = true\n      port          = 3000\n    }\n    workspace \"production\" {\n      use \"kubernetes\" {\n        load_balancer = true\n        port          = 3030\n      }\n    }\n  }\n}\n\n// Variables for use when pushing images to a registry\nvariable \"push_image\" {\n  default     = \"catsby/example-go-pull\"\n  type        = string\n  description = \"Image name for the built image to push to the Docker registry.\"\n}\n\nvariable \"push_tag\" {\n  default = {\n    \"default\"    = \"dev\"\n    \"production\" = \"latest\"\n  }[workspace.name]\n  type        = string\n  description = \"Tag to use when pushing the image to a registry\"\n}\n\nvariable \"push_registry_username\" {\n  default     = \"catsby\"\n  type        = string\n  sensitive   = true\n  description = \"username for container push registry\"\n}\n\nvariable \"push_registry_password\" {\n  default     = \"nope\"\n  type        = string\n  sensitive   = true\n  description = \"password for push registry\"\n}\n\n// Variables for use when pulling an image from a registry\nvariable \"pull_image\" {\n  default     = \"catsby/example-go-pull\"\n  type        = string\n  description = \"Image name to pull with docker-pull.\"\n}\n\nvariable \"pull_tag\" {\n  default     = \"dev\"\n  type        = string\n  description = \"Tag to use when pulling an image with docker-pull\"\n}\n\nvariable \"pull_registry_username\" {\n  default     = \"catsby\"\n  type        = string\n  sensitive   = true\n  description = \"username for container pull registry\"\n}\n\nvariable \"pull_registry_password\" {\n  default     = \"nope\"\n  type        = string\n  sensitive   = true\n  description = \"password for pull registry\"\n}\n\n// Miscellaneous variables\nvariable \"port\" {\n  type = number\n  default = {\n    \"default\"    = 3000\n    \"production\" = 3030\n  }[workspace.name]\n  description = \"Port number exposed to the outside, e.g. localhost:3000\"\n}\n\n\nrunner {\n  enabled = true\n\n  data_source \"git\" {\n    url  = \"https://github.com/hashicorp/waypoint-examples.git\"\n    path = \"kubernetes/go-workspace-pull\"\n  }\n}\n"
  },
  {
    "path": "kubernetes/java/.gitignore",
    "content": "target/\n.env\n.waypoint/\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBeans\n.sts4-cache\n\n### IntelliJ IDEA ###\n.idea\n*.iws\n*.iml\n*.ipr\n\n### NetBeans ###\n/nbproject/private/\n/nbbuild/\n/dist/\n/nbdist/\n/.nb-gradle/\nbuild/\n!**/src/main/**/build/\n!**/src/test/**/build/\n\n### VS Code ###\n.vscode/"
  },
  {
    "path": "kubernetes/java/.mvn/wrapper/maven-wrapper.properties",
    "content": "distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip"
  },
  {
    "path": "kubernetes/java/README.md",
    "content": "# Java Getting Started\n\n|Title|Description|\n|---|---|\n|Pack|GCR|\n|Cloud|Multiple|\n|Language|Java|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker)|\n\nThis is an example Java Spring application that can be deployed with Waypoint.\n\nWaypoint defaults to using Heroku buildpacks if you do not specify a [builder variable](https://waypointproject.io/plugins/pack#builder) in the `waypoint.hcl` configuration section for `pack` within the `build` section. This example uses Heroku buildpacks by default.\n\n# Deploying the example application.\n\n1. Install a Waypoint Server up and ensure `waypoint context verify` is successful.\n1. `waypoint init`\n1. `waypoint up`\n1. Visit a URL provided in the `waypoint` output.\n"
  },
  {
    "path": "kubernetes/java/mvnw",
    "content": "#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven2 Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home\n    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html\n    if [ -z \"$JAVA_HOME\" ]; then\n      if [ -x \"/usr/libexec/java_home\" ]; then\n        export JAVA_HOME=\"`/usr/libexec/java_home`\"\n      else\n        export JAVA_HOME=\"/Library/Java/Home\"\n      fi\n    fi\n    ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Mingw, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\n  # TODO classpath?\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n\n  if [ -z \"$1\" ]\n  then\n    echo \"Path not specified to find_maven_basedir\"\n    return 1\n  fi\n\n  basedir=\"$1\"\n  wdir=\"$1\"\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    # workaround for JBEAP-8937 (on Solaris 10/Sparc)\n    if [ -d \"${wdir}\" ]; then\n      wdir=`cd \"$wdir/..\"; pwd`\n    fi\n    # end of workaround\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nBASE_DIR=`find_maven_basedir \"$(pwd)\"`\nif [ -z \"$BASE_DIR\" ]; then\n  exit 1;\nfi\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-\"$BASE_DIR\"}\nif [ \"$MVNW_VERBOSE\" = true ]; then\n  echo $MAVEN_PROJECTBASEDIR\nfi\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\n  [ -n \"$MAVEN_PROJECTBASEDIR\" ] &&\n    MAVEN_PROJECTBASEDIR=`cygpath --path --windows \"$MAVEN_PROJECTBASEDIR\"`\nfi\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG \"$@\"\n#!/bin/sh\n# ----------------------------------------------------------------------------\n# Licensed to the Apache Software Foundation (ASF) under one\n# or more contributor license agreements.  See the NOTICE file\n# distributed with this work for additional information\n# regarding copyright ownership.  The ASF licenses this file\n# to you under the Apache License, Version 2.0 (the\n# \"License\"); you may not use this file except in compliance\n# with the License.  You may obtain a copy of the License at\n#\n#    https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing,\n# software distributed under the License is distributed on an\n# \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n# KIND, either express or implied.  See the License for the\n# specific language governing permissions and limitations\n# under the License.\n# ----------------------------------------------------------------------------\n\n# ----------------------------------------------------------------------------\n# Maven Start Up Batch script\n#\n# Required ENV vars:\n# ------------------\n#   JAVA_HOME - location of a JDK home dir\n#\n# Optional ENV vars\n# -----------------\n#   M2_HOME - location of maven2's installed home dir\n#   MAVEN_OPTS - parameters passed to the Java VM when running Maven\n#     e.g. to debug Maven itself, use\n#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\n#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files\n# ----------------------------------------------------------------------------\n\nif [ -z \"$MAVEN_SKIP_RC\" ] ; then\n\n  if [ -f /etc/mavenrc ] ; then\n    . /etc/mavenrc\n  fi\n\n  if [ -f \"$HOME/.mavenrc\" ] ; then\n    . \"$HOME/.mavenrc\"\n  fi\n\nfi\n\n# OS specific support.  $var _must_ be set to either true or false.\ncygwin=false;\ndarwin=false;\nmingw=false\ncase \"`uname`\" in\n  CYGWIN*) cygwin=true ;;\n  MINGW*) mingw=true;;\n  Darwin*) darwin=true\n    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home\n    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html\n    if [ -z \"$JAVA_HOME\" ]; then\n      if [ -x \"/usr/libexec/java_home\" ]; then\n        export JAVA_HOME=\"`/usr/libexec/java_home`\"\n      else\n        export JAVA_HOME=\"/Library/Java/Home\"\n      fi\n    fi\n    ;;\nesac\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  if [ -r /etc/gentoo-release ] ; then\n    JAVA_HOME=`java-config --jre-home`\n  fi\nfi\n\nif [ -z \"$M2_HOME\" ] ; then\n  ## resolve links - $0 may be a link to maven's home\n  PRG=\"$0\"\n\n  # need this for relative symlinks\n  while [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n      PRG=\"$link\"\n    else\n      PRG=\"`dirname \"$PRG\"`/$link\"\n    fi\n  done\n\n  saveddir=`pwd`\n\n  M2_HOME=`dirname \"$PRG\"`/..\n\n  # make it fully qualified\n  M2_HOME=`cd \"$M2_HOME\" && pwd`\n\n  cd \"$saveddir\"\n  # echo Using m2 at $M2_HOME\nfi\n\n# For Cygwin, ensure paths are in UNIX format before anything is touched\nif $cygwin ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --unix \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --unix \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --unix \"$CLASSPATH\"`\nfi\n\n# For Mingw, ensure paths are in UNIX format before anything is touched\nif $mingw ; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=\"`(cd \"$M2_HOME\"; pwd)`\"\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=\"`(cd \"$JAVA_HOME\"; pwd)`\"\nfi\n\nif [ -z \"$JAVA_HOME\" ]; then\n  javaExecutable=\"`which javac`\"\n  if [ -n \"$javaExecutable\" ] && ! [ \"`expr \\\"$javaExecutable\\\" : '\\([^ ]*\\)'`\" = \"no\" ]; then\n    # readlink(1) is not available as standard on Solaris 10.\n    readLink=`which readlink`\n    if [ ! `expr \"$readLink\" : '\\([^ ]*\\)'` = \"no\" ]; then\n      if $darwin ; then\n        javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n        javaExecutable=\"`cd \\\"$javaHome\\\" && pwd -P`/javac\"\n      else\n        javaExecutable=\"`readlink -f \\\"$javaExecutable\\\"`\"\n      fi\n      javaHome=\"`dirname \\\"$javaExecutable\\\"`\"\n      javaHome=`expr \"$javaHome\" : '\\(.*\\)/bin'`\n      JAVA_HOME=\"$javaHome\"\n      export JAVA_HOME\n    fi\n  fi\nfi\n\nif [ -z \"$JAVACMD\" ] ; then\n  if [ -n \"$JAVA_HOME\"  ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n      # IBM's JDK on AIX uses strange locations for the executables\n      JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n      JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n  else\n    JAVACMD=\"`which java`\"\n  fi\nfi\n\nif [ ! -x \"$JAVACMD\" ] ; then\n  echo \"Error: JAVA_HOME is not defined correctly.\" >&2\n  echo \"  We cannot execute $JAVACMD\" >&2\n  exit 1\nfi\n\nif [ -z \"$JAVA_HOME\" ] ; then\n  echo \"Warning: JAVA_HOME environment variable is not set.\"\nfi\n\nCLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher\n\n# traverses directory structure from process work directory to filesystem root\n# first directory with .mvn subdirectory is considered project base directory\nfind_maven_basedir() {\n\n  if [ -z \"$1\" ]\n  then\n    echo \"Path not specified to find_maven_basedir\"\n    return 1\n  fi\n\n  basedir=\"$1\"\n  wdir=\"$1\"\n  while [ \"$wdir\" != '/' ] ; do\n    if [ -d \"$wdir\"/.mvn ] ; then\n      basedir=$wdir\n      break\n    fi\n    # workaround for JBEAP-8937 (on Solaris 10/Sparc)\n    if [ -d \"${wdir}\" ]; then\n      wdir=`cd \"$wdir/..\"; pwd`\n    fi\n    # end of workaround\n  done\n  echo \"${basedir}\"\n}\n\n# concatenates all lines of a file\nconcat_lines() {\n  if [ -f \"$1\" ]; then\n    echo \"$(tr -s '\\n' ' ' < \"$1\")\"\n  fi\n}\n\nBASE_DIR=`find_maven_basedir \"$(pwd)\"`\nif [ -z \"$BASE_DIR\" ]; then\n  exit 1;\nfi\n\n##########################################################################################\n# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\n# This allows using the maven wrapper in projects that prohibit checking in binary data.\n##########################################################################################\nif [ -r \"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\" ]; then\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Found .mvn/wrapper/maven-wrapper.jar\"\n    fi\nelse\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ...\"\n    fi\n    if [ -n \"$MVNW_REPOURL\" ]; then\n      jarUrl=\"$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\n    else\n      jarUrl=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\n    fi\n    while IFS=\"=\" read key value; do\n      case \"$key\" in (wrapperUrl) jarUrl=\"$value\"; break ;;\n      esac\n    done < \"$BASE_DIR/.mvn/wrapper/maven-wrapper.properties\"\n    if [ \"$MVNW_VERBOSE\" = true ]; then\n      echo \"Downloading from: $jarUrl\"\n    fi\n    wrapperJarPath=\"$BASE_DIR/.mvn/wrapper/maven-wrapper.jar\"\n    if $cygwin; then\n      wrapperJarPath=`cygpath --path --windows \"$wrapperJarPath\"`\n    fi\n\n    if command -v wget > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found wget ... using wget\"\n        fi\n        if [ -z \"$MVNW_USERNAME\" ] || [ -z \"$MVNW_PASSWORD\" ]; then\n            wget \"$jarUrl\" -O \"$wrapperJarPath\"\n        else\n            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD \"$jarUrl\" -O \"$wrapperJarPath\"\n        fi\n    elif command -v curl > /dev/null; then\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Found curl ... using curl\"\n        fi\n        if [ -z \"$MVNW_USERNAME\" ] || [ -z \"$MVNW_PASSWORD\" ]; then\n            curl -o \"$wrapperJarPath\" \"$jarUrl\" -f\n        else\n            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o \"$wrapperJarPath\" \"$jarUrl\" -f\n        fi\n\n    else\n        if [ \"$MVNW_VERBOSE\" = true ]; then\n          echo \"Falling back to using Java to download\"\n        fi\n        javaClass=\"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java\"\n        # For Cygwin, switch paths to Windows format before running javac\n        if $cygwin; then\n          javaClass=`cygpath --path --windows \"$javaClass\"`\n        fi\n        if [ -e \"$javaClass\" ]; then\n            if [ ! -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Compiling MavenWrapperDownloader.java ...\"\n                fi\n                # Compiling the Java class\n                (\"$JAVA_HOME/bin/javac\" \"$javaClass\")\n            fi\n            if [ -e \"$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class\" ]; then\n                # Running the downloader\n                if [ \"$MVNW_VERBOSE\" = true ]; then\n                  echo \" - Running MavenWrapperDownloader.java ...\"\n                fi\n                (\"$JAVA_HOME/bin/java\" -cp .mvn/wrapper MavenWrapperDownloader \"$MAVEN_PROJECTBASEDIR\")\n            fi\n        fi\n    fi\nfi\n##########################################################################################\n# End of extension\n##########################################################################################\n\nexport MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-\"$BASE_DIR\"}\nif [ \"$MVNW_VERBOSE\" = true ]; then\n  echo $MAVEN_PROJECTBASEDIR\nfi\nMAVEN_OPTS=\"$(concat_lines \"$MAVEN_PROJECTBASEDIR/.mvn/jvm.config\") $MAVEN_OPTS\"\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin; then\n  [ -n \"$M2_HOME\" ] &&\n    M2_HOME=`cygpath --path --windows \"$M2_HOME\"`\n  [ -n \"$JAVA_HOME\" ] &&\n    JAVA_HOME=`cygpath --path --windows \"$JAVA_HOME\"`\n  [ -n \"$CLASSPATH\" ] &&\n    CLASSPATH=`cygpath --path --windows \"$CLASSPATH\"`\n  [ -n \"$MAVEN_PROJECTBASEDIR\" ] &&\n    MAVEN_PROJECTBASEDIR=`cygpath --path --windows \"$MAVEN_PROJECTBASEDIR\"`\nfi\n\n# Provide a \"standardized\" way to retrieve the CLI args that will\n# work with both Windows and non-Windows executions.\nMAVEN_CMD_LINE_ARGS=\"$MAVEN_CONFIG $@\"\nexport MAVEN_CMD_LINE_ARGS\n\nWRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\n\nexec \"$JAVACMD\" \\\n  $MAVEN_OPTS \\\n  -classpath \"$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar\" \\\n  \"-Dmaven.home=${M2_HOME}\" \"-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}\" \\\n  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG \"$@\"\n"
  },
  {
    "path": "kubernetes/java/mvnw.cmd",
    "content": "@REM ----------------------------------------------------------------------------\r\n@REM Licensed to the Apache Software Foundation (ASF) under one\r\n@REM or more contributor license agreements.  See the NOTICE file\r\n@REM distributed with this work for additional information\r\n@REM regarding copyright ownership.  The ASF licenses this file\r\n@REM to you under the Apache License, Version 2.0 (the\r\n@REM \"License\"); you may not use this file except in compliance\r\n@REM with the License.  You may obtain a copy of the License at\r\n@REM\r\n@REM    https://www.apache.org/licenses/LICENSE-2.0\r\n@REM\r\n@REM Unless required by applicable law or agreed to in writing,\r\n@REM software distributed under the License is distributed on an\r\n@REM \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n@REM KIND, either express or implied.  See the License for the\r\n@REM specific language governing permissions and limitations\r\n@REM under the License.\r\n@REM ----------------------------------------------------------------------------\r\n\r\n@REM ----------------------------------------------------------------------------\r\n@REM Maven Start Up Batch script\r\n@REM\r\n@REM Required ENV vars:\r\n@REM JAVA_HOME - location of a JDK home dir\r\n@REM\r\n@REM Optional ENV vars\r\n@REM M2_HOME - location of maven2's installed home dir\r\n@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands\r\n@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending\r\n@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven\r\n@REM     e.g. to debug Maven itself, use\r\n@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000\r\n@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files\r\n@REM ----------------------------------------------------------------------------\r\n\r\n@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'\r\n@echo off\r\n@REM set title of command window\r\ntitle %0\r\n@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'\r\n@if \"%MAVEN_BATCH_ECHO%\" == \"on\"  echo %MAVEN_BATCH_ECHO%\r\n\r\n@REM set %HOME% to equivalent of $HOME\r\nif \"%HOME%\" == \"\" (set \"HOME=%HOMEDRIVE%%HOMEPATH%\")\r\n\r\n@REM Execute a user defined script before this one\r\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPre\r\n@REM check for pre script, once with legacy .bat ending and once with .cmd ending\r\nif exist \"%HOME%\\mavenrc_pre.bat\" call \"%HOME%\\mavenrc_pre.bat\"\r\nif exist \"%HOME%\\mavenrc_pre.cmd\" call \"%HOME%\\mavenrc_pre.cmd\"\r\n:skipRcPre\r\n\r\n@setlocal\r\n\r\nset ERROR_CODE=0\r\n\r\n@REM To isolate internal variables from possible post scripts, we use another setlocal\r\n@setlocal\r\n\r\n@REM ==== START VALIDATION ====\r\nif not \"%JAVA_HOME%\" == \"\" goto OkJHome\r\n\r\necho.\r\necho Error: JAVA_HOME not found in your environment. >&2\r\necho Please set the JAVA_HOME variable in your environment to match the >&2\r\necho location of your Java installation. >&2\r\necho.\r\ngoto error\r\n\r\n:OkJHome\r\nif exist \"%JAVA_HOME%\\bin\\java.exe\" goto init\r\n\r\necho.\r\necho Error: JAVA_HOME is set to an invalid directory. >&2\r\necho JAVA_HOME = \"%JAVA_HOME%\" >&2\r\necho Please set the JAVA_HOME variable in your environment to match the >&2\r\necho location of your Java installation. >&2\r\necho.\r\ngoto error\r\n\r\n@REM ==== END VALIDATION ====\r\n\r\n:init\r\n\r\n@REM Find the project base dir, i.e. the directory that contains the folder \".mvn\".\r\n@REM Fallback to current working directory if not found.\r\n\r\nset MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%\r\nIF NOT \"%MAVEN_PROJECTBASEDIR%\"==\"\" goto endDetectBaseDir\r\n\r\nset EXEC_DIR=%CD%\r\nset WDIR=%EXEC_DIR%\r\n:findBaseDir\r\nIF EXIST \"%WDIR%\"\\.mvn goto baseDirFound\r\ncd ..\r\nIF \"%WDIR%\"==\"%CD%\" goto baseDirNotFound\r\nset WDIR=%CD%\r\ngoto findBaseDir\r\n\r\n:baseDirFound\r\nset MAVEN_PROJECTBASEDIR=%WDIR%\r\ncd \"%EXEC_DIR%\"\r\ngoto endDetectBaseDir\r\n\r\n:baseDirNotFound\r\nset MAVEN_PROJECTBASEDIR=%EXEC_DIR%\r\ncd \"%EXEC_DIR%\"\r\n\r\n:endDetectBaseDir\r\n\r\nIF NOT EXIST \"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\" goto endReadAdditionalConfig\r\n\r\n@setlocal EnableExtensions EnableDelayedExpansion\r\nfor /F \"usebackq delims=\" %%a in (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\jvm.config\") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a\r\n@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%\r\n\r\n:endReadAdditionalConfig\r\n\r\nSET MAVEN_JAVA_EXE=\"%JAVA_HOME%\\bin\\java.exe\"\r\nset WRAPPER_JAR=\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.jar\"\r\nset WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain\r\n\r\nset DOWNLOAD_URL=\"https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\r\n\r\nFOR /F \"tokens=1,2 delims==\" %%A IN (\"%MAVEN_PROJECTBASEDIR%\\.mvn\\wrapper\\maven-wrapper.properties\") DO (\r\n    IF \"%%A\"==\"wrapperUrl\" SET DOWNLOAD_URL=%%B\r\n)\r\n\r\n@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central\r\n@REM This allows using the maven wrapper in projects that prohibit checking in binary data.\r\nif exist %WRAPPER_JAR% (\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Found %WRAPPER_JAR%\r\n    )\r\n) else (\r\n    if not \"%MVNW_REPOURL%\" == \"\" (\r\n        SET DOWNLOAD_URL=\"%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar\"\r\n    )\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Couldn't find %WRAPPER_JAR%, downloading it ...\r\n        echo Downloading from: %DOWNLOAD_URL%\r\n    )\r\n\r\n    powershell -Command \"&{\"^\r\n\t\t\"$webclient = new-object System.Net.WebClient;\"^\r\n\t\t\"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {\"^\r\n\t\t\"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');\"^\r\n\t\t\"}\"^\r\n\t\t\"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')\"^\r\n\t\t\"}\"\r\n    if \"%MVNW_VERBOSE%\" == \"true\" (\r\n        echo Finished downloading %WRAPPER_JAR%\r\n    )\r\n)\r\n@REM End of extension\r\n\r\n@REM Provide a \"standardized\" way to retrieve the CLI args that will\r\n@REM work with both Windows and non-Windows executions.\r\nset MAVEN_CMD_LINE_ARGS=%*\r\n\r\n%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% \"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%\" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*\r\nif ERRORLEVEL 1 goto error\r\ngoto end\r\n\r\n:error\r\nset ERROR_CODE=1\r\n\r\n:end\r\n@endlocal & set ERROR_CODE=%ERROR_CODE%\r\n\r\nif not \"%MAVEN_SKIP_RC%\" == \"\" goto skipRcPost\r\n@REM check for post script, once with legacy .bat ending and once with .cmd ending\r\nif exist \"%HOME%\\mavenrc_post.bat\" call \"%HOME%\\mavenrc_post.bat\"\r\nif exist \"%HOME%\\mavenrc_post.cmd\" call \"%HOME%\\mavenrc_post.cmd\"\r\n:skipRcPost\r\n\r\n@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'\r\nif \"%MAVEN_BATCH_PAUSE%\" == \"on\" pause\r\n\r\nif \"%MAVEN_TERMINATE_CMD%\" == \"on\" exit %ERROR_CODE%\r\n\r\nexit /B %ERROR_CODE%\r\n"
  },
  {
    "path": "kubernetes/java/pom.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd\">\n\t<modelVersion>4.0.0</modelVersion>\n\t<parent>\n\t\t<groupId>org.springframework.boot</groupId>\n\t\t<artifactId>spring-boot-starter-parent</artifactId>\n\t\t<version>2.3.4.RELEASE</version>\n\t\t<relativePath/> <!-- lookup parent from repository -->\n\t</parent>\n\t<groupId>com.example</groupId>\n\t<artifactId>waypoint</artifactId>\n\t<version>0.0.1-SNAPSHOT</version>\n\t<name>waypoint</name>\n\t<description>Demo project for Spring Boot</description>\n\n\t<properties>\n\t\t<java.version>11</java.version>\n\t</properties>\n\n\t<dependencies>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-actuator</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-thymeleaf</artifactId>\n\t\t</dependency>\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-web</artifactId>\n\t\t</dependency>\n\n\t\t<dependency>\n\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t<artifactId>spring-boot-starter-test</artifactId>\n\t\t\t<scope>test</scope>\n\t\t\t<exclusions>\n\t\t\t\t<exclusion>\n\t\t\t\t\t<groupId>org.junit.vintage</groupId>\n\t\t\t\t\t<artifactId>junit-vintage-engine</artifactId>\n\t\t\t\t</exclusion>\n\t\t\t</exclusions>\n\t\t</dependency>\n\t</dependencies>\n\n\t<build>\n\t\t<plugins>\n\t\t\t<plugin>\n\t\t\t\t<groupId>org.springframework.boot</groupId>\n\t\t\t\t<artifactId>spring-boot-maven-plugin</artifactId>\n\t\t\t</plugin>\n\t\t</plugins>\n\t</build>\n\n</project>\n"
  },
  {
    "path": "kubernetes/java/src/main/java/com/example/waypoint/WaypointApplication.java",
    "content": "/*\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\npackage com.example.waypoint;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.web.bind.annotation.RequestMapping;\n\n@Controller\n@SpringBootApplication\npublic class WaypointApplication {\n\n\tpublic static void main(String[] args) {\n\t\tSpringApplication.run(WaypointApplication.class, args);\n\t}\n\n\t@RequestMapping(\"/\")\n\tString index() {\n\t  return \"index\";\n\t}\n\n}\n"
  },
  {
    "path": "kubernetes/java/src/main/resources/application.properties",
    "content": "\n"
  },
  {
    "path": "kubernetes/java/src/main/resources/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/java/src/main/resources/templates/fragments/layout.html",
    "content": "<!doctype html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html th:fragment=\"layout (template, menu)\">\n<head>\n    <title>Waypoint Java Example</title>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n</head>\n\n<body>\n    <div th:replace=\"${template}\"/>\n\n    <script th:src=\"@{/webjars/jquery/jquery.min.js}\"></script>\n    <script th:src=\"@{/webjars/jquery-ui/jquery-ui.min.js}\"></script>\n</body>\n"
  },
  {
    "path": "kubernetes/java/src/main/resources/templates/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html xmlns:th=\"http://www.thymeleaf.org\" th:replace=\"~{fragments/layout :: layout (~{::body},'index')}\">\n\n<body>\n\n  <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Java Icon\" />\n        </div>\n        <h1>This Java app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n\n</body>\n</html>\n"
  },
  {
    "path": "kubernetes/java/src/test/java/com/example/waypoint/WaypointApplicationTests.java",
    "content": "/*\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\npackage com.example.waypoint;\n\nimport org.junit.jupiter.api.Test;\nimport org.springframework.boot.test.context.SpringBootTest;\n\n@SpringBootTest\nclass WaypointApplicationTests {\n\n\t@Test\n\tvoid contextLoads() {\n\t}\n\n}\n"
  },
  {
    "path": "kubernetes/java/system.properties",
    "content": "java.runtime.version=11"
  },
  {
    "path": "kubernetes/java/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-java\"\n\napp \"kubernetes-java-app\" {\n  build {\n    use \"pack\" {\n      builder=\"gcr.io/buildpacks/builder:v1\"\n    }\n    registry {\n      use \"docker\" {\n        image = \"kubernetes-java-app\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      namespace = \"default\"\n      probe_path = \"/\"\n      service_port = 8080\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      node_port = 32000\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs/README.md",
    "content": "# Waypoint Kubernetes Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nWaypoint can deploy to a local Kubernetes server or a cloud-hosted cluster. See the tutorial for details."
  },
  {
    "path": "kubernetes/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs\"\n\napp \"kubernetes-nodejs-web\" {\n  labels = {\n    \"service\" = \"kubernetes-nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"kubernetes-nodejs-web\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      // Sets up a load balancer to access released application\n      load_balancer = true\n      port          = 3000\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-apply/README.md",
    "content": "# Waypoint Kubernetes Example (using `kubernetes-apply`)\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n\nThis example shows how to deploy an application built with buildpacks\nto Kubernetes using templated Kubernetes YAML files. This would also work\nwith JSON or Jsonnet files.\n"
  },
  {
    "path": "kubernetes/nodejs-apply/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-apply/k8s/deployment.yaml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: my-deployment\n  labels:\n    app: myapp\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: myapp\n  template:\n    metadata:\n      labels:\n        app: myapp\n    spec:\n      containers:\n      - name: myapp\n        image: ${artifact.image}:${artifact.tag}\n        env:\n          %{ for k,v in entrypoint.env }\n          - name: ${k}\n            value: \"${v}\"\n          %{ endfor }\n          # Ensure we set PORT for the URL service. This is only necessary\n          # if we want the URL service to function.\n          - name: PORT\n            value: \"3000\"\n"
  },
  {
    "path": "kubernetes/nodejs-apply/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-apply/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs-apply/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-apply/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-apply/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-apply-nodejs\"\n\napp \"apply-nodejs-web\" {\n  labels = {\n    \"service\" = \"apply-nodejs-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"apply-nodejs-web\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes-apply\" {\n      // Template the directory so that we process each file in the directory\n      // as a template. This lets us inject the artifact from the previous step.\n      path = templatedir(\"${path.app}/k8s\")\n\n      // This label determines what resources we own. Any that aren't present\n      // in our folder that match this label will be deleted.\n      prune_label = \"app=myapp\"\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/README.md",
    "content": "# Waypoint Kubernetes Example (using Helm)\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n\nThis example shows how to deploy an application built with buildpacks\nto Kubernetes using a local Helm chart.\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/.helmignore",
    "content": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation (prefixed with !). Only one pattern per line.\n.DS_Store\n# Common VCS dirs\n.git/\n.gitignore\n.bzr/\n.bzrignore\n.hg/\n.hgignore\n.svn/\n# Common backup files\n*.swp\n*.bak\n*.tmp\n*.orig\n*~\n# Various IDEs\n.project\n.idea/\n*.tmproj\n.vscode/\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/Chart.yaml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\napiVersion: v2\nname: waypoint-nodejs\ndescription: Helm chart example for Waypoint\ntype: application\nversion: 0.1.0\nappVersion: \"1.0.0\"\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/templates/NOTES.txt",
    "content": "Hello!\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/templates/_helpers.tpl",
    "content": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"app.name\" -}}\n{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCreate a default fully qualified app name.\nWe truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).\nIf release name contains chart name it will be used as a full name.\n*/}}\n{{- define \"app.fullname\" -}}\n{{- if .Values.fullnameOverride }}\n{{- .Values.fullnameOverride | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- $name := default .Chart.Name .Values.nameOverride }}\n{{- if contains $name .Release.Name }}\n{{- .Release.Name | trunc 63 | trimSuffix \"-\" }}\n{{- else }}\n{{- printf \"%s-%s\" .Release.Name $name | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n{{- end }}\n{{- end }}\n\n{{/*\nCreate chart name and version as used by the chart label.\n*/}}\n{{- define \"app.chart\" -}}\n{{- printf \"%s-%s\" .Chart.Name .Chart.Version | replace \"+\" \"_\" | trunc 63 | trimSuffix \"-\" }}\n{{- end }}\n\n{{/*\nCommon labels\n*/}}\n{{- define \"app.labels\" -}}\nhelm.sh/chart: {{ include \"app.chart\" . }}\n{{ include \"app.selectorLabels\" . }}\n{{- if .Chart.AppVersion }}\napp.kubernetes.io/version: {{ .Chart.AppVersion | quote }}\n{{- end }}\napp.kubernetes.io/managed-by: {{ .Release.Service }}\n{{- end }}\n\n{{/*\nSelector labels\n*/}}\n{{- define \"app.selectorLabels\" -}}\napp.kubernetes.io/name: {{ include \"app.name\" . }}\napp.kubernetes.io/instance: {{ .Release.Name }}\n{{- end }}\n\n{{/*\nCreate the name of the service account to use\n*/}}\n{{- define \"app.serviceAccountName\" -}}\n{{- if .Values.serviceAccount.create }}\n{{- default (include \"app.fullname\" .) .Values.serviceAccount.name }}\n{{- else }}\n{{- default \"default\" .Values.serviceAccount.name }}\n{{- end }}\n{{- end }}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/templates/deployment.yaml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: {{ include \"app.fullname\" . }}\n  labels:\n    {{- include \"app.labels\" . | nindent 4 }}\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      {{- include \"app.selectorLabels\" . | nindent 6 }}\n  template:\n    metadata:\n      labels:\n        {{- include \"app.selectorLabels\" . | nindent 8 }}\n    spec:\n      {{- with .Values.image.pullSecrets }}\n      imagePullSecrets:\n        {{- toYaml . | nindent 8 }}\n      {{- end }}\n      containers:\n        - name: {{ .Chart.Name }}\n          image: \"{{ .Values.image.repository }}:{{ .Values.image.tag }}\"\n          imagePullPolicy: {{ .Values.image.pullPolicy }}\n          ports:\n            - name: http\n              containerPort: 3000\n              protocol: TCP\n          env:\n            - name: PORT\n              value: \"3000\"\n          {{- with .Values.env }}\n          {{- toYaml . | nindent 12 }}\n          {{- end }}\n          resources:\n            {{- toYaml .Values.resources | nindent 12 }}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/templates/service.yaml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\napiVersion: v1\nkind: Service\nmetadata:\n  name: {{ include \"app.fullname\" . }}\n  labels:\n    {{- include \"app.labels\" . | nindent 4 }}\nspec:\n  type: LoadBalancer\n  ports:\n    - port: 80\n      targetPort: http\n      protocol: TCP\n      name: http\n  selector:\n    {{- include \"app.selectorLabels\" . | nindent 4 }}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/helm/values.yaml",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nimage:\n  repository: \"\"\n  tag: \"\"\n  pullPolicy: IfNotPresent\n  pullSecrets: null\n\nenv: null\n\nresources: {}\n  # We usually recommend not to specify default resources and to leave this as a conscious\n  # choice for the user. This also increases chances charts run on environments with little\n  # resources, such as Minikube. If you do want to specify resources, uncomment the following\n  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.\n  # limits:\n  #   cpu: 100m\n  #   memory: 128Mi\n  # requests:\n  #   cpu: 100m\n  #   memory: 128Mi\n"
  },
  {
    "path": "kubernetes/nodejs-helm/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-helm/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs-helm/values.yaml.tpl",
    "content": "env:\n%{ for k,v in entrypoint.env ~}\n- name: ${k}\n  value: \"${v}\"\n%{ endfor ~}\n"
  },
  {
    "path": "kubernetes/nodejs-helm/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-helm/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-helm/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-helm\"\n\napp \"nodejs-helm-web\" {\n  labels = {\n    \"service\" = \"nodejs-helm-web\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-helm-web\"\n        tag   = gitrefpretty()\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"helm\" {\n      name  = app.name\n      chart = \"${path.app}/helm\"\n\n      // We use a values file so we can set the entrypoint environment\n      // variables into a rich YAML structure. This is easier than --set\n      values = [\n        file(templatefile(\"${path.app}/values.yaml.tpl\")),\n      ]\n\n      set {\n        name  = \"image.repository\"\n        value = artifact.image\n      }\n\n      set {\n        name  = \"image.tag\"\n        value = artifact.tag\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/README.md",
    "content": "# Waypoint Kubernetes Example using Ingress for Release\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nWaypoint can deploy to a local Kubernetes server or a cloud-hosted cluster. See the tutorial for details.\n\n## Prerequisites\n\nYour kubernetes cluster must have an ingress controller already running. We \nrecommend using the (NGINX ingress controller](https://kubernetes.github.io/ingress-nginx/).\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs-ingress/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-ingress/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-ingress\"\n\napp \"nodejs-ingress-app\" {\n  labels = {\n    \"service\" = \"nodejs-ingress-app\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-ingress-app\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      ingress \"http\" {\n        path_type = \"Prefix\"\n        path      = \"/\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/README.md",
    "content": "# Waypoint Kubernetes Ingress Proxy Example using Sidecar\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nThis example shows ingress to an app being proxied by an Nginx sidecar container. \n\n## Config\n\nNginx config is stored in Vault, and is delivered by the CEB to a shared memory volume at container startup, and the Nginx container entrypoint override moves it to `/etc/nginx` before starting Nginx itself.\n\n## Prerequisites\n\nYou must have Vault running and Waypoint configured matching to use the [Vault config sourcer](https://www.waypointproject.io/plugins/vault).\n\n1. Start a simple local Vault cluster with token auth, run `vault server -dev -dev-listen-address=<Vault address>` * This address must be accessible by the pods in your Kubernetes cluster.\n2. Configure the Vault config sourcer on Waypoint by running: `waypoint config source-set -type=vault -config=addr=<Vault address> -config=token=<Vault token>`.\n3. Add the 'nginx.conf' secret to Vault at the same path as inside the `configdynamic` block in 'waypoint.hcl': `cat nginx.conf | VAULT_ADDR=<Vault address> VAULT_TOKEN=<Vault token> vault kv put /secret/apps/sample-app nginx.conf=-`\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/nginx.conf",
    "content": "worker_processes  1;\nevents {\n    worker_connections  1024;\n}\n\nhttp {\n    include       mime.types;\n    default_type  application/octet-stream;\n\n    sendfile        on;\n    keepalive_timeout  65;\n\n    server {\n       listen       80;\n       server_name  localhost;\n       location / {\n           proxy_pass  http://localhost:8080/;\n       }\n       error_page   500 502 503 504  /50x.html;\n       location = /50x.html {\n           root   /usr/share/nginx/html;\n       }\n    }  \n}\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-ingress-sidecar/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-ingress\"\n\napp \"nodejs-ingress-sidecar\" {\n  labels = {\n    \"service\" = \"nodejs-ingress-sidecar\",\n    \"env\"     = \"dev\"\n  }\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-ingress-sidecar\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n  config {\n    file = {\n      \"/shared-config/nginx.conf\" = configdynamic(\"vault\", {\n        path = \"secret/data/apps/sample-app\"\n        key  = \"data/nginx.conf\"\n      })\n    }\n  }\n  deploy {\n    use \"kubernetes\" {\n      namespace    = \"default\"\n      probe_path   = \"/\"\n      scratch_path = [\"/shared-config\"]\n      service_port = 8080\n      pod {\n        sidecar {\n          image = \"nginx:1.21.1\"\n          container {\n            name = \"nginx\"\n            port {\n              name = \"http\"\n              port = 80\n            }\n            command = [\"/bin/sh\"]\n            args    = [\"-c\", \"until [ -f /shared-config/nginx.conf ]; do sleep 1; echo 'waiting for waypoint app container to inject config at /shared-config/nginx.conf...'; done; cp /shared-config/nginx.conf /etc/nginx/nginx.conf; nginx -g 'daemon off;'\"]\n          }\n        }\n      }\n    }\n  }\n  release {\n    use \"kubernetes\" {\n      port = 443\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-local-registry/README.md",
    "content": "# Waypoint Kubernetes Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nWaypoint can deploy to a local Kubernetes server or a cloud-hosted cluster. See the tutorial for details."
  },
  {
    "path": "kubernetes/nodejs-local-registry/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-local-registry/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-local-registry/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs-local-registry/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-local-registry/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-local-registry/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-local\"\n\napp \"nodejs-local-app\" {\n  labels = {\n    \"service\" = \"nodejs-local-app\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"localhost:5000/nodejs-local-app\"\n        tag   = \"1\"\n        local = false\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      probe_path = \"/\"\n    }\n  }\n\n  release {\n    use \"kubernetes\" {\n      // Sets up a load balancer to access released application\n      load_balancer = true\n      port          = 3000\n    }\n  }\n}\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/README.md",
    "content": "# Waypoint Kubernetes Sidecar Local Proxy Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Kubernetes](https://www.waypointproject.io/plugins/kubernetes)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-kubernetes)|\n\nThis is an example of an app with a Telegraf sidecar that listens for StatsD metrics on port 8125 and prints them.\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/telegraf.conf",
    "content": "[global_tags]\n  platform = \"waypoint\"\n\n[[outputs.health]]\n  service_address = \"http://:8127\"\n\n[[outputs.file]]\n  files = [\"stdout\"]\n  data_format = \"influx\"\n\n[[inputs.statsd]]\n  protocol = \"udp\"\n  service_address = \":8125\"\n\n[[inputs.statsd]]\n  protocol = \"tcp\"\n  service_address = \":8126\"\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "kubernetes/nodejs-metrics-sidecar/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"kubernetes-nodejs-metrics-sidecar\"\n\napp \"nodejs-metrics-sidecar\" {\n  labels = {\n    \"service\" = \"nodejs-metrics-sidecar\",\n    \"env\"     = \"dev\"\n  }\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-metrics-sidecar\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"kubernetes\" {\n      namespace    = \"default\"\n      probe_path   = \"/\"\n      scratch_path = [\"/shared-config\"]\n      service_port = 8080\n      pod {\n        sidecar {\n          image = \"telegraf:1.19.3\"\n          container {\n            name = \"telegraf\"\n            port {\n              name = \"health\"\n              port = 8127\n            }\n            port {\n              name = \"statsd-tcp\"\n              port = 8126\n            }\n            port {\n              name = \"statsd-udp\"\n              port = 8125\n            }\n            probe_path = \"/health\"\n            command    = [\"/bin/sh\"]\n            args       = [\"-c\", \"echo $TELEGRAF_CONF | base64 --decode > /opt/telegraf.conf; telegraf --config /opt/telegraf.conf\"]\n            static_environment = {\n              \"TELEGRAF_CONF\" : filebase64(\"${path.app}/telegraf.conf\")\n            }\n          }\n        }\n      }\n    }\n  }\n  release {\n    use \"kubernetes\" {\n      port = 443\n    }\n  }\n}\n"
  },
  {
    "path": "learn/dynamic-application-configuration/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                                                                 |\n| -------- |-----------------------------------------------------------------------------------------------------------------------------|\n| Pack     | Cloud Native Buildpack                                                                                                      |\n| Cloud    | Nomad                                                                                                                       |\n| Language | Go                                                                                                                          |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                                                                     |\n| Tutorial | [HashiCorp Waypoint Use Case](https://developer.hashicorp.com/waypoint/docs/use-cases/dynamic-config-vault-dynamic-secrets) |\n\nA minimal Go HTTP server, which connects to a Postgres database, and informs the\nclient if it has done so successfully. The Waypoint configuration makes use of \nWaypoint's [dynamic configuration](https://developer.hashicorp.com/waypoint/docs/app-config/dynamic) \nfeature. The [HashiCorp Vault config sourcer plugin](https://developer.hashicorp.com/waypoint/plugins/vault)\nis used to retrieve a dynamic credential for the Postgres database from a database\nsecret engine mount in Vault.\n\n## Pre-requisites\n\n### Nomad cluster\n\nYou should have a Nomad cluster up and running to which your Waypoint runner can\nconnect to deploy the Nomad job.\n\n### Vault cluster\n\nA Vault cluster is required, and must be reachable from containers running in your\nNomad cluster. It is also assumed that there is a database secrets engine mount,\nwith a connection configured for a Postgres database. There should also be a role,\nnamed `readonly`.\n\n### Postgres Database\n\nThe Nomad job file, `postgres.nomad.hcl`, in this path is a quick, _development_\nenvironment jobspec to get Postgres up and running. It is not intended for production\nuse, but can optionally be the database that the server connects to, and from which\nVault sources dynamic credentials.\n"
  },
  {
    "path": "learn/dynamic-application-configuration/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/learn/dynamic-application-configuration\n\ngo 1.19\n\nrequire github.com/lib/pq v1.10.7\n"
  },
  {
    "path": "learn/dynamic-application-configuration/go.sum",
    "content": "github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=\ngithub.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=\n"
  },
  {
    "path": "learn/dynamic-application-configuration/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"database/sql\"\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n\t\"strconv\"\n\n\t_ \"github.com/lib/pq\"\n)\n\nfunc main() {\n\thttp.HandleFunc(\"/\", connect)\n\terr := http.ListenAndServe(\":80\", nil)\n\tif err != nil {\n\t\treturn\n\t}\n}\n\nfunc connect(w http.ResponseWriter, r *http.Request) {\n\ttype conn struct {\n\t\tuser     string\n\t\tpassword string\n\t\tport     int\n\t\thost     string\n\t\tdbname   string\n\t}\n\n\tport, err := strconv.Atoi(os.Getenv(\"PORT\"))\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\tconnection := conn{\n\t\tuser:     os.Getenv(\"USERNAME\"),\n\t\tpassword: os.Getenv(\"PASSWORD\"),\n\t\tport:     port,\n\t\thost:     os.Getenv(\"HOST\"),\n\t\tdbname:   os.Getenv(\"DBNAME\"),\n\t}\n\n\tpsqlInfo := fmt.Sprintf(\"host=%s port=%d user=%s \"+\n\t\t\"password=%s dbname=%s sslmode=disable\",\n\t\tconnection.host, connection.port, connection.user, connection.password, connection.dbname)\n\tdb, err := sql.Open(\"postgres\", psqlInfo)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer db.Close()\n\n\terr = db.Ping()\n\tif err != nil {\n\t\tlog.Fatal(err)\n\t}\n\n\tfmt.Print(\"Hello, database! Connected to \" + connection.host)\n\tlog.Println(\"Successfully connected to the database! :)\")\n}\n"
  },
  {
    "path": "learn/dynamic-application-configuration/postgres.nomad.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\njob \"postgres\" {\n  region      = \"global\"\n  datacenters = [\"dc1\"]\n\n  group \"postgres\" {\n    network {\n      port \"postgres\" {\n        static = 5432\n        to     = 5432\n      }\n    }\n\n    task \"postgres\" {\n      driver = \"docker\"\n      config {\n        image = \"postgres\"\n        ports = [\"postgres\"]\n      }\n\n      env {\n        POSTGRES_USER     = \"postgres\"\n        POSTGRES_PASSWORD = \"root\"\n      }\n    } // end of task\n  }   // end of group\n}     // end of job"
  },
  {
    "path": "learn/dynamic-application-configuration/readonly.sql",
    "content": "-- Copyright (c) HashiCorp, Inc.\n-- SPDX-License-Identifier: MPL-2.0\n\nCREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' INHERIT;\nGRANT ro TO \"{{name}}\";\n"
  },
  {
    "path": "learn/dynamic-application-configuration/waypoint-policy.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\npath \"database/creds/readonly\" {\n  capabilities = [\"read\"]\n}\n"
  },
  {
    "path": "learn/dynamic-application-configuration/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"learn-dynamic-go\"\n\napp \"dynamic-go\" {\n  labels = {\n    \"service\" = \"dynamic-go\",\n  }\n\n  config {\n    env = {\n      \"USERNAME\" = dynamic(\"vault\", {\n        path = \"database/creds/readonly\"\n        key  = \"username\"\n      })\n      \"PASSWORD\" = dynamic(\"vault\", {\n        path = \"database/creds/readonly\"\n        key  = \"password\"\n      })\n\n      HOST   = var.postgres_ip\n      PORT   = var.postgres_port\n      DBNAME = var.postgres_dbname\n    }\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = var.image_name\n        tag   = var.image_tag\n        auth {\n          username = var.registry_username\n          password = var.registry_password\n        }\n      }\n    }\n  }\n\n  deploy {\n    use \"nomad\" {\n      service_port = 80\n    }\n  }\n}\n\nvariable \"postgres_ip\" {\n  type = string\n}\n\nvariable \"postgres_port\" {\n  type = number\n}\n\nvariable \"postgres_dbname\" {\n  type    = string\n  default = \"postgres\"\n}\n\nvariable \"image_name\" {\n  type = string\n}\n\nvariable \"image_tag\" {\n  type = string\n}\n\nvariable \"registry_username\" {\n  type      = string\n  sensitive = true\n}\n\nvariable \"registry_password\" {\n  type      = string\n  sensitive = true\n}\n"
  },
  {
    "path": "learn/input-variables/README.md",
    "content": "# Waypoint Go Example\n\n| Title    | Description                                                                          |\n| -------- | ------------------------------------------------------------------------------------ |\n| Pack     | Cloud Native Buildpack                                                               |\n| Cloud    | Local                                                                                |\n| Language | Go                                                                                   |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                              |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-docker) |\n\nA barebones Go API, which can easily be deployed by Waypoint.\nThis example includes usage of Waypoint's [input variables](https://waypointproject.io/docs/waypoint-hcl/variables/input).\n"
  },
  {
    "path": "learn/input-variables/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/docker/go\n\n// +heroku goVersion go1.15\ngo 1.15\n"
  },
  {
    "path": "learn/input-variables/go.sum",
    "content": "github.com/corona10/goimagehash v1.0.2/go.mod h1:/l9umBhvcHQXVtQO1V6Gp1yD20STawkhRnnX0D1bvVI=\ngithub.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=\ngithub.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=\ngithub.com/goccy/go-graphviz v0.0.6 h1:sCT69fmH2KKsObVfsozYyKXxrqmIfo3SyHZs72xkgxs=\ngithub.com/goccy/go-graphviz v0.0.6/go.mod h1:wXVsXxmyMQU6TN3zGRttjNn3h+iCAS7xQFC6TlNvLhk=\ngithub.com/goccy/go-graphviz v0.0.9 h1:s/FMMJ1Joj6La3S5ApO3Jk2cwM4LpXECC2muFx3IPQQ=\ngithub.com/goccy/go-graphviz v0.0.9/go.mod h1:wXVsXxmyMQU6TN3zGRttjNn3h+iCAS7xQFC6TlNvLhk=\ngithub.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=\ngithub.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=\ngithub.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=\ngithub.com/nfnt/resize v0.0.0-20160724205520-891127d8d1b5/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=\ngithub.com/ofabry/go-callvis v0.6.1 h1:JSVl4QdS5+997C38Bu0lMPXOs5NLOoKaY32sgKcgdUI=\ngithub.com/ofabry/go-callvis v0.6.1/go.mod h1:0rRJ5J4UM3gOuKEWcoSng8RJmDUGJCJRAd+nY+zT2KE=\ngithub.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 h1:49lOXmGaUpV9Fz3gd7TFZY106KVlPVa5jcYD1gaQf98=\ngithub.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=\ngithub.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI=\ngithub.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ=\ngithub.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=\ngithub.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=\ngithub.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=\ngolang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=\ngolang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=\ngolang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=\ngolang.org/x/image v0.0.0-20200119044424-58c23975cae1 h1:5h3ngYt7+vXCDZCup/HkCQgW5XwmSvR/nA2JmJ0RErg=\ngolang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\ngolang.org/x/image v0.0.0-20201208152932-35266b937fa6 h1:nfeHNc1nAqecKCy2FCy4HY+soOOe5sDLJ/gZLbx6GYI=\ngolang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=\ngolang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=\ngolang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/mod v0.4.1 h1:Kvvh58BN8Y9/lBi7hTekvtMpm07eUZ0ck5pRHpsMWrY=\ngolang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=\ngolang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=\ngolang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=\ngolang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=\ngolang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=\ngolang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=\ngolang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=\ngolang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=\ngolang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=\ngolang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=\ngolang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=\ngolang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=\ngolang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=\ngolang.org/x/tools v0.0.0-20200305224536-de023d59a5d1 h1:A6Mu2vcvuNXbBiGKuVHG74fmEPmzsZ5dzG0WhV2GcqI=\ngolang.org/x/tools v0.0.0-20200305224536-de023d59a5d1/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=\ngolang.org/x/tools v0.1.0 h1:po9/4sTYwZU9lPhi1tOrb4hCv3qrhiQ77LZfGa2OjwY=\ngolang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=\ngolang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=\ngolang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=\n"
  },
  {
    "path": "learn/input-variables/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tfileServer := http.FileServer(http.Dir(\"./static\"))\n\thttp.Handle(\"/\", fileServer)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n"
  },
  {
    "path": "learn/input-variables/static/index.html",
    "content": "<!DOCTYPE html>\n<!--\n Copyright (c) HashiCorp, Inc.\n SPDX-License-Identifier: MPL-2.0\n-->\n\n<html>\n\n<head>\n  <title>Waypoint Go Example</title>\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/static/stylesheets/main.css\" />\n</head>\n\n<body>\n  <div class=\"container\">\n    <header>\n      <a href=\"https://waypointproject.io\" class=\"logo\">\n        <img src=\"/static/images/logo.svg\" alt=\"Logo\" />\n      </a>\n    </header>\n    <section class=\"content\">\n      <div class=\"language-icon\">\n        <img class=\"language-image\" src=\"/static/images/language.svg\" alt=\"Icon\" />\n      </div>\n      <h1>This static HTML app was deployed with Waypoint using Go.</h1>\n      <p>\n        Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n      </p>\n      <p>\n        Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n      </p>\n    </section>\n    <footer>\n      <a href=\"https://hashicorp.com\" class=\"hashi\">\n        <img src=\"/static/images/hashi.svg\" alt=\"HashiCorp\" />\n      </a>\n    </footer>\n  </div>\n</body>\n\n</html>\n"
  },
  {
    "path": "learn/input-variables/static/static/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/static/images/pattern-tl.svg), url(/static/images/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\n.language-image {\n  width: 60px;\n  height: 60px;\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}\n"
  },
  {
    "path": "learn/input-variables/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"learn/inputvars-go\"\n\napp \"inputvars-go-app\" {\n  labels = {\n    \"service\" = \"inputvars-go-app\",\n    \"env\"     = \"dev\"\n  }\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = var.image\n        tag   = var.tag\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n\nvariable \"image\" {\n\tdefault     = \"waypoint-test/learn-inputvars-go\"\n\ttype        = string\n\tdescription = \"Image name for the built image in the Docker registry.\"\n}\nvariable \"tag\" {\n\tdefault     = \"latest\"\n\ttype        = string\n\tdescription = \"The tab for the built image in the Docker registry.\"\n}"
  },
  {
    "path": "learn/static-application-configuration/README.md",
    "content": "# Static Waypoint Configuration Demo\n\nFollow along at [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/static-application-configuration).\n\n| Title    | Description                                                                                        |\n| -------- | -------------------------------------------------------------------------------------------------- |\n| Pack     | Cloud Native Buildpack                                                                             |\n| Cloud    | Local                                                                                              |\n| Language | Go                                                                                                 |\n| Docs     | [Docker](https://www.waypointproject.io/plugins/docker)                                            |\n| Tutorial | [HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/static-application-configuration) |\n"
  },
  {
    "path": "learn/static-application-configuration/go.mod",
    "content": "module github.com/hashicorp/waypoint-examples/learn/static-application-configuration\n\n// +heroku goVersion go1.15\ngo 1.15\n"
  },
  {
    "path": "learn/static-application-configuration/main.go",
    "content": "// Copyright (c) HashiCorp, Inc.\n// SPDX-License-Identifier: MPL-2.0\n\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n)\n\nfunc main() {\n\thttp.HandleFunc(\"/\", saleViewHandler)\n\n\tfmt.Printf(\"Starting server at: http://localhost:3000\\n\")\n\tif err := http.ListenAndServe(\":3000\", nil); err != nil {\n\t\tlog.Fatal(err)\n\t}\n}\n\nfunc saleViewHandler(w http.ResponseWriter, r *http.Request) {\n\tsalePercent := os.Getenv(\"SALE_PERCENT\")\n\tsaleEndsOn := os.Getenv(\"SALE_ENDS_ON\")\n\tfmt.Fprintf(w, `\n\t<style>body { font-size: 3em; }</style>\n\t<h1>Today&#8217;s Sale</h1>\n\t<div>Save %s!</div>\n\t<div>Until %s</div>\n\t`,\n\t\tsalePercent,\n\t\tsaleEndsOn)\n}\n"
  },
  {
    "path": "learn/static-application-configuration/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"learn-static-go\"\n\napp \"static-go\" {\n  labels = {\n    \"service\" = \"static-go\",\n    \"env\"     = \"dev\"\n  }\n\n  config {\n    env = {\n      SALE_PERCENT = \"50%\"\n    }\n  }\n\n  build {\n    use \"pack\" {}\n  }\n\n  deploy {\n    use \"docker\" {}\n  }\n}\n"
  },
  {
    "path": "nomad/nodejs/README.md",
    "content": "# Waypoint Nomad Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Nomad](https://www.waypointproject.io/plugins/nomad)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-nomad)|\n\nWaypoint can run against a full Nomad cluster or a local development agent. Visit the tutorial for the details."
  },
  {
    "path": "nomad/nodejs/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "nomad/nodejs/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "nomad/nodejs/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "nomad/nodejs/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "nomad/nodejs/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "nomad/nodejs/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"nomad-nodejs\"\n\napp \"nomad-nodejs-web\" {\n\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nomad-nodejs-web\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"nomad\" {\n      // these options both default to the values shown, but are left here to\n      // show they are configurable\n      datacenter = \"dc1\"\n      namespace  = \"default\"\n    }\n  }\n\n}\n"
  },
  {
    "path": "nomad/nodejs-jobspec/README.md",
    "content": "# Waypoint Nomad Example\n\n|Title|Description|\n|---|---|\n|Pack|Cloud Native Buildpack|\n|Cloud|Any|\n|Language|NodeJS|\n|Docs|[Nomad](https://www.waypointproject.io/plugins/nomad)|\n|Tutorial|[HashiCorp Learn](https://learn.hashicorp.com/tutorials/waypoint/get-started-nomad)|\n\nWaypoint can run against a full Nomad cluster or a local development agent. Visit the tutorial for the details."
  },
  {
    "path": "nomad/nodejs-jobspec/app.nomad.tpl",
    "content": "job \"web\" {\n  datacenters = [\"dc1\"]\n  group \"app\" {\n    update {\n      max_parallel = 1\n      canary       = 1\n      auto_revert  = true\n      auto_promote = false\n      health_check = \"task_states\"\n    }\n\n    task \"app\" {\n      driver = \"docker\"\n      config {\n        image = \"${artifact.image}:${artifact.tag}\"\n      }\n\n      env {\n        %{ for k,v in entrypoint.env ~}\n        ${k} = \"${v}\"\n        %{ endfor ~}\n\n        // For URL service\n        PORT = \"3000\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "nomad/nodejs-jobspec/index.js",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\nconst express = require('express')\nconst path = require('path')\nconst PORT = process.env.PORT || 5000\n\nexpress()\n  .use(express.static(path.join(__dirname, 'public')))\n  .set('views', path.join(__dirname, 'views'))\n  .set('view engine', 'ejs')\n  .get('/', (req, res) => res.render('pages/index'))\n  .listen(PORT, () => console.log(`Listening on ${ PORT }`))\n"
  },
  {
    "path": "nomad/nodejs-jobspec/package.json",
    "content": "{\n  \"name\": \"node-js-getting-started\",\n  \"version\": \"0.3.0\",\n  \"description\": \"A sample Node.js app using Express 4\",\n  \"engines\": {\n    \"node\": \"12.x\"\n  },\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"start\": \"node index.js\",\n    \"test\": \"node test.js\"\n  },\n  \"dependencies\": {\n    \"ejs\": \"^2.5.6\",\n    \"express\": \"^4.15.2\"\n  },\n  \"devDependencies\": {\n    \"got\": \"^11.3.0\",\n    \"tape\": \"^4.7.0\"\n  },\n  \"keywords\": [\n    \"node\",\n    \"express\"\n  ],\n  \"license\": \"MIT\"\n}\n"
  },
  {
    "path": "nomad/nodejs-jobspec/public/stylesheets/main.css",
    "content": "/**\n * Copyright (c) HashiCorp, Inc.\n * SPDX-License-Identifier: MPL-2.0\n */\n\n:root {\n  --text: #E4E5E7;\n  --background: #000;\n  --brand: 4, 198, 194;\n  --headline: #FFF;\n}\n\n* {\n  margin: 0;\n  padding: 0;\n}\n\nhtml, body {\n  min-height: 100vh;\n}\n\nbody {\n  font-family: BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", \"Helvetica\", \"Arial\", sans-serif;\n  font-size: 15px;\n  line-height: 24px;\n  color: var(--text);\n  text-align: center;\n  background-image: url(/pattern-tl.svg), url(/pattern-br.svg);\n  background-position: top left, bottom right;\n  background-repeat: no-repeat;\n  background-color: var(--background);\n}\n\n.container {\n  display: flex;\n  flex-direction: column;\n  min-height: calc(100vh - 80px - 60px);\n  padding: 80px 60px 60px;\n}\n\nsection {\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  flex-grow: 1;\n  padding: 60px 0;\n}\n\nsection .language-icon {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 80px;\n  height: 80px;\n  border-radius: 100%;\n  border: 1px solid rgba(var(--brand), .5);\n  background: rgba(var(--brand), .15);\n}\n\nsection h1 {\n  color: var(--headline);\n  font-size: 18px;\n  font-weight: 600;\n  padding: 40px 0 8px;\n}\n\nsection p {\n  padding-top: 12px;\n}\n\nsection code {\n  font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;\n  font-size: 14px;\n  padding: 4px 6px;\n  margin: 0 2px;\n  border-radius: 3px;\n  background: rgba(255, 255, 255, .15); \n}\n\nsection a {\n  color: rgb(var(--brand));\n}"
  },
  {
    "path": "nomad/nodejs-jobspec/views/pages/index.ejs",
    "content": "<!DOCTYPE html>\n<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<html>\n  <head>\n    <% include ../partials/header.ejs %>\n  </head>\n\n  <body>\n    <div class=\"container\">\n      <header>\n        <a href=\"https://waypointproject.io\" class=\"logo\">\n          <img src=\"/logo.svg\" alt=\"Logo\" />\n        </a>\n      </header>\n      <section class=\"content\">\n        <div class=\"language-icon\">\n          <img src=\"/language.svg\" alt=\"Node.js Icon\" />\n        </div>\n        <h1>This Node.js app was deployed with Waypoint.</h1>\n        <p>\n          Try making a change to this text locally and run <code>waypoint up</code> again to see it.\n        </p>\n        <p>\n          Read the <a href=\"https://waypointproject.io/docs\">documentation</a> for more about Waypoint.\n        </p>\n      </section>\n      <footer>\n        <a href=\"https://hashicorp.com\" class=\"hashi\">\n          <img src=\"/hashi.svg\" alt=\"HashiCorp\" />\n        </a>\n      </footer>\n    </div>\n  </body>\n</html>\n"
  },
  {
    "path": "nomad/nodejs-jobspec/views/partials/header.ejs",
    "content": "<%/*\n  Copyright (c) HashiCorp, Inc.\n  SPDX-License-Identifier: MPL-2.0\n*/%>\n\n<title>Waypoint Node.js Example</title>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/stylesheets/main.css\" />\n"
  },
  {
    "path": "nomad/nodejs-jobspec/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"nomad-jobspec-nodejs\"\n\napp \"nodejs-jobspec-web\" {\n  build {\n    use \"pack\" {}\n    registry {\n      use \"docker\" {\n        image = \"nodejs-jobspec-web\"\n        tag   = \"1\"\n        local = true\n      }\n    }\n  }\n\n  deploy {\n    use \"nomad-jobspec\" {\n      // Templated to perhaps bring in the artifact from a previous\n      // build/registry, entrypoint env vars, etc.\n      jobspec = templatefile(\"${path.app}/app.nomad.tpl\")\n    }\n  }\n\n  release {\n    use \"nomad-jobspec-canary\" {\n      groups = [\n        \"app\"\n      ]\n      fail_deployment = false\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/variables/.gitignore",
    "content": "\n# Local .terraform directories\nterraform/tfc/.terraform/*\n\n# .tfstate files\n*.tfstate\n*.tfstate.*\n\n# Crash log files\ncrash.log\ncrash.*.log\n\n# Exclude all .tfvars files, which are likely to contain sensitive data, such as\n# password, private keys, and other secrets. These should not be part of version\n# control as they are data points which are potentially sensitive and subject\n# to change depending on the environment.\n*.tfvars\n*.tfvars.json\n\n# Ignore override files as they are usually used to override resources locally and so\n# are not checked in\noverride.tf\noverride.tf.json\n*_override.tf\n*_override.tf.json\n\n# Include override files you do wish to add to version control using negated pattern\n# !example_override.tf\n\n# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan\n# example: *tfplan*\n\n# Ignore CLI configuration files\n.terraformrc\nterraform.rc"
  },
  {
    "path": "terraform/variables/Dockerfile",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nFROM nginx:stable\n\n\n"
  },
  {
    "path": "terraform/variables/README.md",
    "content": "# Terraform Variables Example\n\n|Title| Description                                                                          |\n|---|--------------------------------------------------------------------------------------|\n|Pack| Docker                                                                               |\n|Cloud| Local                                                                                |\n|Language| n/a                                                                                  |\n|Docs| [Terraform Cloud](https://developer.hashicorp.com/waypoint/plugins/terraform-cloud)                     |\n\nThis example demonstrates sourcing output variables from Terraform Cloud for use in a Waypoint config.\n\nFor example, it's possible to create resources like AWS VPCs, AWS/ECS clusters, and subnets in Terraform,\ndefine them as Terraform outputs, and then reference them directly in a Waypoint config.\n\nThis example is intended to be a minimalist demonstration of referencing Terraform outputs, not a full\nreal-world use-case. It creates static Terraform output variables of various types (string, list, and map), and then references\nthem in local Docker deployment config.\n\n## Terraform Setup\n\n### Org and Workspace Creation\n\nFirst, we'll need a Terraform Cloud workspace. If you don't have one already, you can create one\nusing the Terraform found in `terraform/tfc`. If you already have a Terraform org and workspace,\nskip ahead to the next section.\n\nThis module requires three inputs:\n\n- A TFC API token. Follow [this guide](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens)\nto obtain a TFC api token.\n\n- A TFC organization name. This is arbitrary, but needs to be globally unique.\n\n- An email address to use as your TFC org admin contact address.\n\nRun Terraform to create the TFC org and workspace. You'll be prompted for the above inputs\n\n```shell\n$ cd ./terraform/tfc\n$ terraform init\n...\n$ terraform apply\n...\nApply complete! Resources: 2 added, 0 changed, 0 destroyed.\n```\n\n### Generating Terraform Outputs\n\nIn `terraform/main`, we have the minimal possible Terraform to generate ouputs. This is meant to simulate\nreal Terraform that might be creating and AWS VPC, and outputting things like VPC IDs and subnet arns.\n\nYou'll need the following inputs:\n\n- An org ID and workspace ID. These cannot be referenced as variables, so you'll need to modify \n`./terraform/main/main.tf`. Use the organization name chosen in the previous step, or set this\nto your own organization ID if desired.\n\n```hcl\nterraform {\n  cloud {\n    organization = \"waypoint_tfc_vars_example\" // <- you must change this\n\n    workspaces {\n      name = \"waypoint_tfc_vars_example\"\n    }\n  }\n}\n```\n\nRun the Terraform to produce the outputs:\n```shell\n$ cd ./terraform/main\n$ terraform init\n...\n$ terraform apply\n...\nApply complete! Resources: 0 added, 0 changed, 0 destroyed.\n\nOutputs:\n\nlist_of_strings = [\n  \"item_1\",\n  \"item_2\",\n  \"item_3\",\n]\nmap_of_strings = {\n  \"key1\" = \"value1\"\n  \"key2\" = \"value2\"\n}\nsimple_string = \"justastring\"\n```\n\n## Waypoint setup\n\n#### Waypoint CLI\n\nInstall the Waypoint CLI. See [installation instructions](https://developer.hashicorp.com/waypoint/tutorials/get-started-docker/get-started-install).\n\n#### Waypoint Server\n\nYou'll need a Waypoint server. We recommend using [HCP Waypoint](https://cloud.hashicorp.com/products/waypoint)\nYou'll also need your CLI configured with a [context](https://developer.hashicorp.com/waypoint/commands/context-create)\npointing to this server.\n\n#### Waypoint remote runner\n\nWaypoint remote runners are required to use variables with dynamic defaults. HCP Waypoint will \nwalk you through installing a remote runner into your infrastructure. If you don't have\na runner already, you can run `waypoint runner agent` in a separate terminal window. This\nrunner will have access to Docker on your laptop, which is where we'll be deploying.\n\n#### Waypoint Terraform Configsourcer Config\n\nWaypoint needs to know how to talk to Terraform Cloud at runtime to source the outputs. \nTo accomplish this, run:\n\n```shell\nwaypoint config source-set -type=terraform-cloud -config=token=<your-tfc-token>\n```\n#### Customize the waypoint.hcl\n\n\nTake a look at the waypoint.hcl. In each variable stanza, you'll need to update the\nTerraform organization to match the one your chose during the Terraform setup\n\nExample\n```hcl\nvariable \"single_string_output\" {\n  default = dynamic(\"terraform-cloud\", {\n    organization = \"waypoint_tfc_vars_example\" // REPLACE WITH YOUR ORG ID\n    workspace    = \"waypoint_tfc_vars_example\"\n    output       = \"simple_string\"\n  })\n  type        = string\n  sensitive   = false\n  description = \"Just one tfc output variable with a string type\"\n}\n```\n\nYou'll need to commit those changes, and then push to a repository you control. We recommend\nforking the waypoint-examples repo and modifying your fork. The changes need to be \npushed for the remote runner to recognize them.\n\n#### Waypoint Project\n\nCreate your Waypoint project, pointed to your git repo. You'll need to update the git\nurl to point to your fork\n\n```shell\n$ waypoint project apply \\\n  -data-source=\"git\" \\\n  -git-ref=main \\\n  -git-url=\"https://github.com/<YOUR_ORG>/waypoint-examples\" \\ # <-- YOUR FORK HERE\n  -git-path=terraform/variables \\\n  waypoint_tfc_vars_example\n  \n✓ Project \"waypoint_tfc_vars_example\" created\n```\n\n## Running the deployment\n\nRun `waypoint up` to build and deploy a Docker container. If you're running a runner locally\nusing `waypoint runner agent` (and you have no other runners), add `-local=false` to force\nremote execution on that runner. \n\n```shell\n$ waypoint up -local=false\n\n...\n\nThe deploy was successful!\n```\n\n## Inspecting the variable usage\n\nThe variables were used to configure the Docker container. \n\nUse `docker inspect` to find the deployed container:\n\n```shell\n$ docker ps\nCONTAINER ID   IMAGE                                             COMMAND                  CREATED       STATUS                  PORTS                             NAMES\n589d62b07137   waypoint.local/waypoint_tfc_vars_example:latest   \"/waypoint-entrypoin…\"   2 hours ago   Up 2 hours              80/tcp, 0.0.0.0:62584->3000/tcp   waypoint_tfc_vars_example-01GMZXBPN9R187QFGRGNEN288W\n\n```\n\nAnd then inspect to see the TFC configvars. Only the environment and labels contain TFC config.\n\n```shell\n$ docker inspect 589d62b07137 | jq '.[0].Config | with_entries(select([.key] | inside([\"Env\", \"Labels\"])))'\n{\n  \"Env\": [\n    \"tfc_output_key1=tfc_output_value1\",\n    \"tfc_output_key2=tfc_output_value2\",\n    ...\n  ],\n  \"Labels\": {\n    \"list_item\": \"tfc_output_item_2\",\n    \"simple_string\": \"tfc_output_string\",\n    ...\n  }\n}\n```\n\nNotice that the TFC variables have been injected into the Docker deployment config!\n"
  },
  {
    "path": "terraform/variables/terraform/main/main.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nterraform {\n  cloud {\n    organization = \"waypoint_tfc_vars_example\" // you must change this\n\n    workspaces {\n      name = \"waypoint_tfc_vars_example\"\n    }\n  }\n}"
  },
  {
    "path": "terraform/variables/terraform/main/outputs.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\noutput \"simple_string\" {\n  description = \"a simple string output\"\n  value       = \"tfc_output_string\"\n}\n\noutput \"map_of_strings\" {\n  description = \"a map of strings\"\n  value       = {\n    \"tfc_output_key1\" = \"tfc_output_value1\",\n    \"tfc_output_key2\" = \"tfc_output_value2\"\n  }\n}\n\noutput \"list_of_strings\" {\n  description = \"a map of strings\"\n  value       = [\n    \"tfc_output_item_1\",\n    \"tfc_output_item_2\",\n    \"tfc_output_item_3\"\n  ]\n}\n"
  },
  {
    "path": "terraform/variables/terraform/tfc/.terraform.lock.hcl",
    "content": "# This file is maintained automatically by \"terraform init\".\n# Manual edits may be lost in future updates.\n\nprovider \"registry.terraform.io/hashicorp/tfe\" {\n  version     = \"0.40.0\"\n  constraints = \"~> 0.40.0\"\n  hashes = [\n    \"h1:3rh7nopioN/eS3/iM6rEmkQBtKPrf5zDTpbJm1xM+gg=\",\n    \"zh:0584e2e0ee0794d1b47bcf9502f370a39363043c4fe87ff00ceba49d4c18db9b\",\n    \"zh:1b3586feb1b9327121fa935a9c1d7680004ade14de3ed8362c683f5838ec6c0f\",\n    \"zh:53b64ef590836edef3a6f7396e51652fb56ab735986cc2334847dea85e527b78\",\n    \"zh:70ec39ad78298fcc3ac7dc24a0a56b5847897382c61bc3bcf6bb3f5c863d40aa\",\n    \"zh:75f0c277acc90e348fe0c36c8bc6b1143182177d0ff6fa3626aec169151eca60\",\n    \"zh:8792e8baa9daa5bb22b68a2a00c0403505a7e941785a93bbd2cecd1de56d43fe\",\n    \"zh:9ece3439983bae1dcb6ea080010bc66d9ffc2d55fd2d9505fc3a88d42ddce51e\",\n    \"zh:a37c2476cd58a1b00232cf5dbb2760f8c458bc937f449cdd9b24d55a37a8e7b7\",\n    \"zh:ba8389074d37c66d37296d905b3aaf348db5a6bce372842d75925b957dcb5129\",\n    \"zh:bc8d88671807793e4cb651d681ff67b5cb7622912dc47a71e38181bc93bfec7b\",\n    \"zh:d95ec293fa70e946b6cd657912b33155f8be3413e6128ed2bfa5a493f788e439\",\n    \"zh:ef8c816590ab34557487ff1408ff1a9bc40d1db11af994695255939a94343795\",\n  ]\n}\n"
  },
  {
    "path": "terraform/variables/terraform/tfc/main.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nterraform {\n  required_providers {\n    tfe = {\n      version = \"~> 0.40.0\"\n    }\n  }\n}\n\nprovider \"tfe\" {\n  token    = var.tfc_token\n}\n\nresource \"tfe_organization\" \"tfe_organization\" {\n  name = var.tfc_org_name\n  email = var.tfc_email\n}\n\nresource \"tfe_workspace\" \"waypoint_tfc_vars_example\" {\n  name         = \"waypoint_tfc_vars_example\"\n  organization = tfe_organization.tfe_organization.name\n}"
  },
  {
    "path": "terraform/variables/terraform/tfc/variables.tf",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nvariable \"tfc_org_name\" {\n  description = \"Name of your desired tfc org. Must be unique.\"\n  type        = string\n}\n\nvariable \"tfc_token\" {\n  description = \"The token used to authenticate with Terraform Cloud.\"\n  type        = string\n  sensitive   = true\n}\n\nvariable \"tfc_email\" {\n  description = \"TFC admin email address.\"\n  type        = string\n}\n"
  },
  {
    "path": "terraform/variables/waypoint.hcl",
    "content": "# Copyright (c) HashiCorp, Inc.\n# SPDX-License-Identifier: MPL-2.0\n\nproject = \"waypoint_tfc_vars_example\"\n\napp \"waypoint_tfc_vars_example\" {\n  build {\n    use \"docker\" {\n    }\n  }\n\n  deploy {\n    use \"docker\" {\n\n      labels = {\n        // `simple_string_output` matches the terraform output `simple_string`\n        \"simple_string\" = var.single_string_output\n\n        // `single_list_output` matches the terraform output `list_of_strings`.\n        // Note that the output is a list type in terraform, and can also be\n        // treated as a list here in the waypoint hcl.\n        \"list_item\"     = var.single_list_output[1]\n      }\n\n      // This shows referencing one variable after reading in all terraform outputs.\n      // the waypoint variable is `all_outputs`, and the tfc output name is `map_of_strings`\n      // (see ./terraform/main/outputs.tf).\n      // Also note that the expected type for `static_environment` is also a map of strings,\n      // so we can use the whole variable here. With this setting, the container will have\n      // environment variables for each k/v pair in `map_of_strings`.\n      static_environment = var.all_outputs.map_of_strings\n    }\n  }\n}\n\n# Waypoint can read string-type terraform outputs, and make them available as\n# a string variable. This is the simplest way of reading from terraform.\nvariable \"single_string_output\" {\n  default = dynamic(\"terraform-cloud\", {\n    organization = \"waypoint_tfc_vars_example\" // replace this with your org id\n    workspace    = \"waypoint_tfc_vars_example\"\n    output       = \"simple_string\"\n  })\n  type        = string\n  sensitive   = false\n  description = \"Just one tfc output variable with a string type\"\n}\n\n# Waypoint can also read terraform outputs with complex types that can be represented\n# as json. This can be useful for reading, for example, a complete list of subnets, rather\n# than needing to redeclare each subnet as its own individual string output in terraform.\nvariable \"single_list_output\" {\n  default = dynamic(\"terraform-cloud\", {\n    organization = \"waypoint_tfc_vars_example\" // replace this with your org id\n    workspace    = \"waypoint_tfc_vars_example\"\n    output       = \"list_of_strings\"\n  })\n  type        = list(string)\n  sensitive   = false\n  description = \"One tfc output, but with a type of list<string>\"\n}\n\n# If many variables need to be read from terraform cloud, they can all be made available\n# as a map, where the keys are the output names. This avoids many near-duplicate\n# variable stanzas.\nvariable \"all_outputs\" {\n  default = dynamic(\"terraform-cloud\", {\n    organization = \"waypoint_tfc_vars_example\" // replace this with your org id\n    workspace    = \"waypoint_tfc_vars_example\"\n    // output omitted - will get all outputs\n  })\n  type        = any\n  sensitive   = false\n  description = \"all workspace outputs. Will be a map, with keys as the output names\"\n}\n\n\n"
  }
]