├── .github ├── .syncignore ├── CODEOWNERS ├── dependabot.yml ├── labels.yml ├── release-drafter-config.yml └── workflows │ ├── approve-bot-pr.yml │ ├── create-release.yml │ ├── lint-yaml.yml │ ├── push-image.yml │ ├── synchronize-labels.yml │ ├── test-builder.yml │ ├── test-pull-request.yml │ ├── update-builder-toml.yml │ └── update-github-config.yml ├── .gitignore ├── README.md ├── builder.toml ├── go.mod ├── go.sum ├── scripts ├── .util │ ├── print.sh │ ├── tools.json │ └── tools.sh └── smoke.sh └── smoke ├── dotnet_test.go ├── go_test.go ├── init_test.go ├── java_native_image_test.go ├── java_test.go ├── nodejs_test.go ├── php_test.go ├── procfile_test.go ├── python_test.go ├── ruby_test.go ├── testdata ├── dotnet │ ├── Program.cs │ ├── README.md │ ├── dotnet.csproj │ └── obj │ │ ├── dotnet.csproj.nuget.dgspec.json │ │ ├── dotnet.csproj.nuget.g.props │ │ ├── dotnet.csproj.nuget.g.targets │ │ ├── project.assets.json │ │ └── project.nuget.cache ├── go │ ├── .gitignore │ ├── README.md │ ├── go.mod │ ├── go.sum │ └── main.go ├── httpd │ ├── README.md │ ├── htdocs │ │ └── index.html │ └── httpd.conf ├── java-native-image │ ├── .gitignore │ ├── .mvn │ │ └── wrapper │ │ │ ├── MavenWrapperDownloader.java │ │ │ ├── maven-wrapper.jar │ │ │ └── maven-wrapper.properties │ ├── README.md │ ├── mvnw │ ├── mvnw.cmd │ ├── pom.xml │ └── src │ │ ├── main │ │ ├── java │ │ │ └── io │ │ │ │ └── paketo │ │ │ │ └── demo │ │ │ │ └── DemoApplication.java │ │ └── resources │ │ │ └── application.properties │ │ └── test │ │ └── java │ │ └── io │ │ └── paketo │ │ └── demo │ │ └── DemoApplicationTests.java ├── java │ ├── BOOT-INF │ │ ├── classes │ │ │ ├── application.properties │ │ │ └── io │ │ │ │ └── paketo │ │ │ │ └── demo │ │ │ │ └── DemoApplication.class │ │ ├── classpath.idx │ │ ├── layers.idx │ │ └── lib │ │ │ ├── HdrHistogram-2.1.12.jar │ │ │ ├── LatencyUtils-2.0.3.jar │ │ │ ├── jackson-annotations-2.12.6.jar │ │ │ ├── jackson-core-2.12.6.jar │ │ │ ├── jackson-databind-2.12.6.1.jar │ │ │ ├── jackson-datatype-jdk8-2.12.6.jar │ │ │ ├── jackson-datatype-jsr310-2.12.6.jar │ │ │ ├── jackson-module-parameter-names-2.12.6.jar │ │ │ ├── jakarta.annotation-api-1.3.5.jar │ │ │ ├── jul-to-slf4j-1.7.36.jar │ │ │ ├── log4j-api-2.17.2.jar │ │ │ ├── log4j-to-slf4j-2.17.2.jar │ │ │ ├── logback-classic-1.2.11.jar │ │ │ ├── logback-core-1.2.11.jar │ │ │ ├── micrometer-core-1.7.10.jar │ │ │ ├── netty-buffer-4.1.75.Final.jar │ │ │ ├── netty-codec-4.1.75.Final.jar │ │ │ ├── netty-codec-dns-4.1.75.Final.jar │ │ │ ├── netty-codec-http-4.1.75.Final.jar │ │ │ ├── netty-codec-http2-4.1.75.Final.jar │ │ │ ├── netty-codec-socks-4.1.75.Final.jar │ │ │ ├── netty-common-4.1.75.Final.jar │ │ │ ├── netty-handler-4.1.75.Final.jar │ │ │ ├── netty-handler-proxy-4.1.75.Final.jar │ │ │ ├── netty-resolver-4.1.75.Final.jar │ │ │ ├── netty-resolver-dns-4.1.75.Final.jar │ │ │ ├── netty-resolver-dns-classes-macos-4.1.75.Final.jar │ │ │ ├── netty-resolver-dns-native-macos-4.1.75.Final-osx-x86_64.jar │ │ │ ├── netty-transport-4.1.75.Final.jar │ │ │ ├── netty-transport-classes-epoll-4.1.75.Final.jar │ │ │ ├── netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar │ │ │ ├── netty-transport-native-unix-common-4.1.75.Final.jar │ │ │ ├── reactive-streams-1.0.3.jar │ │ │ ├── reactor-core-3.4.16.jar │ │ │ ├── reactor-netty-core-1.0.17.jar │ │ │ ├── reactor-netty-http-1.0.17.jar │ │ │ ├── slf4j-api-1.7.36.jar │ │ │ ├── snakeyaml-1.28.jar │ │ │ ├── spring-aop-5.3.18.jar │ │ │ ├── spring-beans-5.3.18.jar │ │ │ ├── spring-boot-2.5.12.jar │ │ │ ├── spring-boot-actuator-2.5.12.jar │ │ │ ├── spring-boot-actuator-autoconfigure-2.5.12.jar │ │ │ ├── spring-boot-autoconfigure-2.5.12.jar │ │ │ ├── spring-boot-jarmode-layertools-2.5.12.jar │ │ │ ├── spring-context-5.3.18.jar │ │ │ ├── spring-core-5.3.18.jar │ │ │ ├── spring-expression-5.3.18.jar │ │ │ ├── spring-jcl-5.3.18.jar │ │ │ ├── spring-web-5.3.18.jar │ │ │ └── spring-webflux-5.3.18.jar │ ├── META-INF │ │ ├── MANIFEST.MF │ │ └── maven │ │ │ └── io.paketo │ │ │ └── demo │ │ │ ├── pom.properties │ │ │ └── pom.xml │ ├── README.md │ └── org │ │ └── springframework │ │ └── boot │ │ └── loader │ │ ├── ClassPathIndexFile.class │ │ ├── ExecutableArchiveLauncher.class │ │ ├── JarLauncher.class │ │ ├── LaunchedURLClassLoader$DefinePackageCallType.class │ │ ├── LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class │ │ ├── LaunchedURLClassLoader.class │ │ ├── Launcher.class │ │ ├── MainMethodRunner.class │ │ ├── PropertiesLauncher$1.class │ │ ├── PropertiesLauncher$ArchiveEntryFilter.class │ │ ├── PropertiesLauncher$ClassPathArchives.class │ │ ├── PropertiesLauncher$PrefixMatchingArchiveFilter.class │ │ ├── PropertiesLauncher.class │ │ ├── WarLauncher.class │ │ ├── archive │ │ ├── Archive$Entry.class │ │ ├── Archive$EntryFilter.class │ │ ├── Archive.class │ │ ├── ExplodedArchive$AbstractIterator.class │ │ ├── ExplodedArchive$ArchiveIterator.class │ │ ├── ExplodedArchive$EntryIterator.class │ │ ├── ExplodedArchive$FileEntry.class │ │ ├── ExplodedArchive$SimpleJarFileArchive.class │ │ ├── ExplodedArchive.class │ │ ├── JarFileArchive$AbstractIterator.class │ │ ├── JarFileArchive$EntryIterator.class │ │ ├── JarFileArchive$JarFileEntry.class │ │ ├── JarFileArchive$NestedArchiveIterator.class │ │ └── JarFileArchive.class │ │ ├── data │ │ ├── RandomAccessData.class │ │ ├── RandomAccessDataFile$1.class │ │ ├── RandomAccessDataFile$DataInputStream.class │ │ ├── RandomAccessDataFile$FileAccess.class │ │ └── RandomAccessDataFile.class │ │ ├── jar │ │ ├── AbstractJarFile$JarFileType.class │ │ ├── AbstractJarFile.class │ │ ├── AsciiBytes.class │ │ ├── Bytes.class │ │ ├── CentralDirectoryEndRecord$1.class │ │ ├── CentralDirectoryEndRecord$Zip64End.class │ │ ├── CentralDirectoryEndRecord$Zip64Locator.class │ │ ├── CentralDirectoryEndRecord.class │ │ ├── CentralDirectoryFileHeader.class │ │ ├── CentralDirectoryParser.class │ │ ├── CentralDirectoryVisitor.class │ │ ├── FileHeader.class │ │ ├── Handler.class │ │ ├── JarEntry.class │ │ ├── JarEntryCertification.class │ │ ├── JarEntryFilter.class │ │ ├── JarFile$1.class │ │ ├── JarFile$JarEntryEnumeration.class │ │ ├── JarFile.class │ │ ├── JarFileEntries$1.class │ │ ├── JarFileEntries$EntryIterator.class │ │ ├── JarFileEntries$Offsets.class │ │ ├── JarFileEntries$Zip64Offsets.class │ │ ├── JarFileEntries$ZipOffsets.class │ │ ├── JarFileEntries.class │ │ ├── JarFileWrapper.class │ │ ├── JarURLConnection$1.class │ │ ├── JarURLConnection$JarEntryName.class │ │ ├── JarURLConnection.class │ │ ├── StringSequence.class │ │ └── ZipInflaterInputStream.class │ │ ├── jarmode │ │ ├── JarMode.class │ │ ├── JarModeLauncher.class │ │ └── TestJarMode.class │ │ └── util │ │ └── SystemPropertyUtils.class ├── javascript-frontend │ ├── .gitignore │ ├── README.md │ ├── httpd.toml │ ├── nginx.toml │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ └── robots.txt │ └── src │ │ ├── App.css │ │ ├── App.js │ │ └── index.js ├── nginx │ ├── README.md │ ├── mime.types │ ├── nginx.conf │ └── public │ │ └── index.html ├── nodejs │ ├── .gitignore │ ├── README.md │ ├── package-lock.json │ ├── package.json │ └── server.js ├── php │ ├── README.md │ └── htdocs │ │ └── index.php ├── procfile │ ├── Procfile │ ├── README.md │ ├── static-file-server-1.8.0-linux-amd64 │ └── web │ │ └── hello-world.txt ├── python │ ├── .gitignore │ ├── Pipfile │ ├── Pipfile.lock │ ├── Procfile │ ├── README.md │ ├── server.py │ └── templates │ │ └── index.html └── ruby │ ├── Gemfile │ ├── README.md │ ├── app.rb │ └── config.ru └── web_servers_test.go /.github/.syncignore: -------------------------------------------------------------------------------- 1 | CODEOWNERS 2 | dependabot.yml 3 | workflows/push-image.yml 4 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @paketo-buildpacks/builders-maintainers 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | --- 7 | version: 2 8 | updates: 9 | - package-ecosystem: gomod 10 | directory: "/" 11 | schedule: 12 | interval: daily 13 | open-pull-requests-limit: 10 14 | -------------------------------------------------------------------------------- /.github/labels.yml: -------------------------------------------------------------------------------- 1 | - name: status/possible-priority 2 | description: This issue is ready to work and should be considered as a potential priority 3 | color: F9D0C4 4 | - name: status/prioritized 5 | description: This issue has been triaged and resolving it is a priority 6 | color: BFD4F2 7 | - name: status/blocked 8 | description: This issue has been triaged and resolving it is blocked on some other issue 9 | color: 848978 10 | - name: bug 11 | description: Something isn't working 12 | color: d73a4a 13 | - name: enhancement 14 | description: A new feature or request 15 | color: a2eeef 16 | - name: documentation 17 | description: This issue relates to writing documentation 18 | color: D4C5F9 19 | - name: help wanted 20 | description: Extra attention is needed 21 | color: 008672 22 | - name: semver:major 23 | description: A change requiring a major version bump 24 | color: 6b230e 25 | - name: semver:minor 26 | description: A change requiring a minor version bump 27 | color: cc6749 28 | - name: semver:patch 29 | description: A change requiring a patch version bump 30 | color: f9d0c4 31 | - name: good first issue 32 | description: A good first issue to get started with 33 | color: d3fc03 34 | - name: "failure:release" 35 | description: An issue filed automatically when a release workflow run fails 36 | color: f00a0a 37 | - name: "failure:push" 38 | description: An issue filed automatically when a push buildpackage workflow run fails 39 | color: f00a0a 40 | - name: "failure:update-builder-toml" 41 | description: An issue filed automatically when a builder.toml update workflow run fails 42 | color: f00a0a 43 | - name: "failure:update-github-config" 44 | description: An issue filed automatically when a github config update workflow run fails 45 | color: f00a0a 46 | - name: "failure:approve-bot-pr" 47 | description: An issue filed automatically when a PR auto-approve workflow run fails 48 | color: f00a0a 49 | -------------------------------------------------------------------------------- /.github/release-drafter-config.yml: -------------------------------------------------------------------------------- 1 | # Config for https://github.com/release-drafter/release-drafter 2 | name-template: '$RESOLVED_VERSION' 3 | tag-template: 'v$RESOLVED_VERSION' 4 | filter-by-commitish: true 5 | commitish: main 6 | 7 | change-template: '- $TITLE [#$NUMBER] by [@$AUTHOR](https://github.com/$AUTHOR)' 8 | template: | 9 | ## Full Changelog 10 | 11 | Following pull requests got merged for this release: 12 | 13 | $CHANGES 14 | 15 | version-resolver: 16 | major: 17 | labels: 18 | - 'semver:major' 19 | minor: 20 | labels: 21 | - 'semver:minor' 22 | patch: 23 | labels: 24 | - 'semver:patch' 25 | default: patch 26 | -------------------------------------------------------------------------------- /.github/workflows/approve-bot-pr.yml: -------------------------------------------------------------------------------- 1 | name: Approve Bot PRs and Enable Auto-Merge 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Test Pull Request"] 6 | types: 7 | - completed 8 | 9 | jobs: 10 | download: 11 | name: Download PR Artifact 12 | if: ${{ github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success' }} 13 | runs-on: ubuntu-22.04 14 | outputs: 15 | pr-author: ${{ steps.pr-data.outputs.author }} 16 | pr-number: ${{ steps.pr-data.outputs.number }} 17 | steps: 18 | - name: 'Download artifact' 19 | uses: paketo-buildpacks/github-config/actions/pull-request/download-artifact@main 20 | with: 21 | name: "event-payload" 22 | repo: ${{ github.repository }} 23 | run_id: ${{ github.event.workflow_run.id }} 24 | workspace: "/github/workspace" 25 | token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 26 | - id: pr-data 27 | run: | 28 | echo "author=$(jq -r '.pull_request.user.login' event.json)" >> "$GITHUB_OUTPUT" 29 | echo "number=$(jq -r '.pull_request.number' event.json)" >> "$GITHUB_OUTPUT" 30 | 31 | approve: 32 | name: Approve Bot PRs 33 | needs: download 34 | if: ${{ needs.download.outputs.pr-author == 'paketo-bot' || needs.download.outputs.pr-author == 'dependabot[bot]' }} 35 | runs-on: ubuntu-22.04 36 | steps: 37 | - name: Check Commit Verification 38 | id: unverified-commits 39 | uses: paketo-buildpacks/github-config/actions/pull-request/check-unverified-commits@main 40 | with: 41 | token: ${{ secrets.PAKETO_BOT_REVIEWER_GITHUB_TOKEN }} 42 | repo: ${{ github.repository }} 43 | number: ${{ needs.download.outputs.pr-number }} 44 | 45 | - name: Check for Human Commits 46 | id: human-commits 47 | uses: paketo-buildpacks/github-config/actions/pull-request/check-human-commits@main 48 | with: 49 | token: ${{ secrets.PAKETO_BOT_REVIEWER_GITHUB_TOKEN }} 50 | repo: ${{ github.repository }} 51 | number: ${{ needs.download.outputs.pr-number }} 52 | 53 | - name: Checkout 54 | if: steps.human-commits.outputs.human_commits == 'false' && steps.unverified-commits.outputs.unverified_commits == 'false' 55 | uses: actions/checkout@v3 56 | 57 | - name: Approve 58 | if: steps.human-commits.outputs.human_commits == 'false' && steps.unverified-commits.outputs.unverified_commits == 'false' 59 | uses: paketo-buildpacks/github-config/actions/pull-request/approve@main 60 | with: 61 | token: ${{ secrets.PAKETO_BOT_REVIEWER_GITHUB_TOKEN }} 62 | number: ${{ needs.download.outputs.pr-number }} 63 | 64 | - name: Enable Auto-Merge 65 | if: steps.human-commits.outputs.human_commits == 'false' && steps.unverified-commits.outputs.unverified_commits == 'false' 66 | run: | 67 | gh pr merge ${{ needs.download.outputs.pr-number }} --auto --rebase 68 | env: 69 | GITHUB_TOKEN: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 70 | 71 | failure: 72 | name: Alert on Failure 73 | runs-on: ubuntu-22.04 74 | needs: [download, approve] 75 | if: ${{ always() && needs.download.result == 'failure' || needs.approve.result == 'failure' }} 76 | steps: 77 | - name: File Failure Alert Issue 78 | uses: paketo-buildpacks/github-config/actions/issue/file@main 79 | with: 80 | token: ${{ secrets.GITHUB_TOKEN }} 81 | repo: ${{ github.repository }} 82 | label: "failure:approve-bot-pr" 83 | comment_if_exists: true 84 | issue_title: "Failure: Approve bot PR workflow" 85 | issue_body: | 86 | Approve bot PR workflow [failed](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). 87 | comment_body: | 88 | Another failure occurred: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} 89 | -------------------------------------------------------------------------------- /.github/workflows/create-release.yml: -------------------------------------------------------------------------------- 1 | name: Create Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | concurrency: release 9 | 10 | jobs: 11 | smoke: 12 | name: Smoke Test 13 | runs-on: ubuntu-22.04 14 | outputs: 15 | release_notes: ${{ steps.notes.outputs.body }} 16 | steps: 17 | - name: Setup Go 18 | uses: actions/setup-go@v3 19 | with: 20 | go-version: 1.20.x 21 | 22 | - name: Checkout 23 | uses: actions/checkout@v3 24 | 25 | - name: Get pack version 26 | id: pack-version 27 | run: | 28 | version=$(jq -r .pack "scripts/.util/tools.json") 29 | echo "version=${version#v}" >> "$GITHUB_OUTPUT" 30 | 31 | - name: Install Global Pack 32 | uses: buildpacks/github-actions/setup-pack@main 33 | with: 34 | pack-version: ${{ steps.pack-version.outputs.version }} 35 | 36 | - name: Run Smoke Tests 37 | run: ./scripts/smoke.sh --name builder 38 | 39 | - name: Generate Release Notes 40 | id: notes 41 | run: | 42 | notes="$(pack inspect-builder builder | grep -v 'Inspecting builder' \ 43 | | grep -v 'REMOTE:' \ 44 | | grep -v 'LOCAL:' \ 45 | | grep -v '\(not present\)' \ 46 | | grep -v 'Warning' \ 47 | | sed -e '/./,$!d' \ 48 | | awk -F, '{printf "%s\\n", $0}')" 49 | echo "body=${notes}" >> "$GITHUB_OUTPUT" 50 | 51 | release: 52 | name: Release 53 | runs-on: ubuntu-22.04 54 | needs: smoke 55 | steps: 56 | - name: Checkout With History 57 | uses: actions/checkout@v3 58 | with: 59 | fetch-depth: 0 # gets full history 60 | 61 | - name: Compare With Previous Release 62 | id: compare_previous_release 63 | run: | 64 | if [ -z "$(git diff $(git describe --tags --abbrev=0) -- builder.toml)" ] 65 | then 66 | echo "builder_changes=false" >> "$GITHUB_OUTPUT" 67 | else 68 | echo "builder_changes=true" >> "$GITHUB_OUTPUT" 69 | fi 70 | 71 | - name: Publish Release 72 | id: publish 73 | if: ${{ steps.compare_previous_release.outputs.builder_changes == 'true' }} 74 | uses: release-drafter/release-drafter@v5 75 | with: 76 | config-name: release-drafter-config.yml 77 | publish: true 78 | env: 79 | GITHUB_TOKEN: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 80 | 81 | - name: Update Release Notes 82 | if: ${{ steps.compare_previous_release.outputs.builder_changes == 'true' }} 83 | run: | 84 | set -euo pipefail 85 | shopt -s inherit_errexit 86 | 87 | payload="{\"body\" : \"\`\`\`\n${RELEASE_BODY}\n\`\`\`\"}" 88 | 89 | curl --fail \ 90 | -X PATCH \ 91 | -H "Accept: application/vnd.github.v3+json" \ 92 | -H "Authorization: token ${GITHUB_TOKEN}" \ 93 | "https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}" \ 94 | -d "${payload}" 95 | env: 96 | RELEASE_ID: ${{ steps.publish.outputs.id }} 97 | RELEASE_BODY: ${{ needs.smoke.outputs.release_notes }} 98 | GITHUB_TOKEN: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 99 | 100 | failure: 101 | name: Alert on Failure 102 | runs-on: ubuntu-22.04 103 | needs: [ smoke, release ] 104 | if: ${{ always() && needs.smoke.result == 'failure' || needs.release.result == 'failure' }} 105 | steps: 106 | - name: File Failure Alert Issue 107 | uses: paketo-buildpacks/github-config/actions/issue/file@main 108 | with: 109 | token: ${{ secrets.GITHUB_TOKEN }} 110 | repo: ${{ github.repository }} 111 | label: "failure:release" 112 | comment_if_exists: true 113 | issue_title: "Failure: Create Release workflow" 114 | issue_body: | 115 | Create Release workflow [failed](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). 116 | comment_body: | 117 | Another failure occurred: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} 118 | -------------------------------------------------------------------------------- /.github/workflows/lint-yaml.yml: -------------------------------------------------------------------------------- 1 | name: Lint Workflows 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - '.github/**.yml' 7 | - '.github/**.yaml' 8 | 9 | jobs: 10 | lintYaml: 11 | runs-on: ubuntu-22.04 12 | steps: 13 | - uses: actions/checkout@v3 14 | 15 | - name: Checkout github-config 16 | uses: actions/checkout@v3 17 | with: 18 | repository: paketo-buildpacks/github-config 19 | path: github-config 20 | 21 | - name: Set up Python 22 | uses: actions/setup-python@v4 23 | with: 24 | python-version: 3.8 25 | 26 | - name: Install yamllint 27 | run: pip install yamllint 28 | 29 | - name: Lint YAML files 30 | run: yamllint ./.github -c github-config/.github/.yamllint 31 | -------------------------------------------------------------------------------- /.github/workflows/push-image.yml: -------------------------------------------------------------------------------- 1 | name: Push Builder Image 2 | 3 | on: 4 | release: 5 | types: 6 | - published 7 | 8 | jobs: 9 | push: 10 | name: Push 11 | runs-on: ubuntu-latest 12 | steps: 13 | 14 | - name: Parse Event 15 | id: event 16 | run: | 17 | echo "::set-output name=tag::$(jq -r '.release.tag_name' "${GITHUB_EVENT_PATH}" | sed s/^v//)" 18 | 19 | - name: Checkout 20 | uses: actions/checkout@v2 21 | 22 | - name: Get pack version 23 | id: pack-version 24 | run: | 25 | version=$(jq -r .pack "scripts/.util/tools.json") 26 | echo "::set-output name=version::${version#v}" 27 | 28 | 29 | - name: Install Global Pack 30 | uses: buildpacks/github-actions/setup-pack@main 31 | with: 32 | pack-version: ${{ steps.pack-version.outputs.version }} 33 | 34 | - name: Create Builder Image 35 | run: | 36 | pack builder create builder --config builder.toml 37 | 38 | - name: Push 39 | env: 40 | GCR_PUSH_BOT_JSON_KEY: ${{ secrets.GCR_PUSH_BOT_JSON_KEY }} 41 | run: | 42 | echo "${GCR_PUSH_BOT_JSON_KEY}" | docker login --username _json_key --password-stdin gcr.io 43 | docker tag builder "gcr.io/paketo-buildpacks/builder:full-cf" 44 | 45 | docker push "gcr.io/paketo-buildpacks/builder:full-cf" 46 | 47 | - name: Push 48 | env: 49 | PAKETO_BUILDPACKS_DOCKERHUB_USERNAME: ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_USERNAME }} 50 | PAKETO_BUILDPACKS_DOCKERHUB_PASSWORD: ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_PASSWORD }} 51 | run: | 52 | echo "${PAKETO_BUILDPACKS_DOCKERHUB_PASSWORD}" | docker login --username "${PAKETO_BUILDPACKS_DOCKERHUB_USERNAME}" --password-stdin 53 | docker tag builder "paketobuildpacks/builder:full" 54 | docker tag builder "paketobuildpacks/builder:full-cf" 55 | docker tag builder "paketobuildpacks/builder:${{ steps.event.outputs.tag }}-full" 56 | 57 | docker push "paketobuildpacks/builder:full" 58 | docker push "paketobuildpacks/builder:full-cf" 59 | docker push "paketobuildpacks/builder:${{ steps.event.outputs.tag }}-full" 60 | 61 | - name: Push 62 | env: 63 | CLOUDFOUNDRY_DOCKERHUB_USERNAME: ${{ secrets.CLOUDFOUNDRY_DOCKERHUB_USERNAME }} 64 | CLOUDFOUNDRY_DOCKERHUB_PASSWORD: ${{ secrets.CLOUDFOUNDRY_DOCKERHUB_PASSWORD }} 65 | run: | 66 | echo "${CLOUDFOUNDRY_DOCKERHUB_PASSWORD}" | docker login --username "${CLOUDFOUNDRY_DOCKERHUB_USERNAME}" --password-stdin 67 | docker tag builder "cloudfoundry/cnb:full-cf" 68 | docker tag builder "cloudfoundry/cnb:cflinuxfs3" 69 | 70 | docker push "cloudfoundry/cnb:full-cf" 71 | docker push "cloudfoundry/cnb:cflinuxfs3" 72 | -------------------------------------------------------------------------------- /.github/workflows/synchronize-labels.yml: -------------------------------------------------------------------------------- 1 | name: Synchronize Labels 2 | "on": 3 | push: 4 | branches: 5 | - main 6 | paths: 7 | - .github/labels.yml 8 | workflow_dispatch: {} 9 | jobs: 10 | synchronize: 11 | name: Synchronize Labels 12 | runs-on: 13 | - ubuntu-22.04 14 | steps: 15 | - uses: actions/checkout@v3 16 | - uses: micnncim/action-label-syncer@v1 17 | env: 18 | GITHUB_TOKEN: ${{ github.token }} 19 | -------------------------------------------------------------------------------- /.github/workflows/test-builder.yml: -------------------------------------------------------------------------------- 1 | name: Test Builder 2 | 3 | on: 4 | workflow_dispatch: {} 5 | 6 | jobs: 7 | 8 | smoke: 9 | name: Smoke Test 10 | runs-on: ubuntu-22.04 11 | steps: 12 | - name: Setup Go 13 | uses: actions/setup-go@v3 14 | with: 15 | go-version: 1.20.x 16 | 17 | - name: Checkout 18 | uses: actions/checkout@v3 19 | 20 | - name: Run Smoke Tests 21 | run: ./scripts/smoke.sh 22 | -------------------------------------------------------------------------------- /.github/workflows/test-pull-request.yml: -------------------------------------------------------------------------------- 1 | name: Test Pull Request 2 | 3 | on: 4 | pull_request: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | 10 | smoke: 11 | name: Smoke Test 12 | runs-on: ubuntu-22.04 13 | steps: 14 | - name: Setup Go 15 | uses: actions/setup-go@v3 16 | with: 17 | go-version: 1.20.x 18 | 19 | - name: Checkout 20 | uses: actions/checkout@v3 21 | 22 | - name: Run Smoke Tests 23 | run: ./scripts/smoke.sh 24 | 25 | upload: 26 | name: Upload Workflow Event Payload 27 | runs-on: ubuntu-22.04 28 | steps: 29 | - name: Upload Artifact 30 | uses: actions/upload-artifact@v3 31 | with: 32 | name: event-payload 33 | path: ${{ github.event_path }} 34 | -------------------------------------------------------------------------------- /.github/workflows/update-builder-toml.yml: -------------------------------------------------------------------------------- 1 | name: Update builder.toml and Send Pull Request 2 | 3 | on: 4 | schedule: 5 | - cron: '10 */1 * * *' 6 | workflow_dispatch: {} 7 | 8 | concurrency: builder_update 9 | 10 | jobs: 11 | update: 12 | name: Update builder.toml 13 | runs-on: ubuntu-22.04 14 | steps: 15 | - name: Check out 16 | uses: actions/checkout@v3 17 | 18 | - name: Checkout branch 19 | uses: paketo-buildpacks/github-config/actions/pull-request/checkout-branch@main 20 | with: 21 | branch: "automation/builder-toml" 22 | 23 | - name: Update builder.toml 24 | uses: paketo-buildpacks/github-config/actions/builder/update@main 25 | with: 26 | token: ${{ secrets.GITHUB_TOKEN }} 27 | 28 | - name: Git commit 29 | id: commit 30 | uses: paketo-buildpacks/github-config/actions/pull-request/create-commit@main 31 | with: 32 | message: "Update builder.toml" 33 | pathspec: "builder.toml" 34 | keyid: ${{ secrets.PAKETO_BOT_GPG_SIGNING_KEY_ID }} 35 | key: ${{ secrets.PAKETO_BOT_GPG_SIGNING_KEY }} 36 | 37 | - name: Git push 38 | if: ${{ steps.commit.outputs.commit_sha != '' }} 39 | uses: paketo-buildpacks/github-config/actions/pull-request/push-branch@main 40 | with: 41 | branch: "automation/builder-toml" 42 | 43 | - name: Open Pull Request 44 | if: ${{ steps.commit.outputs.commit_sha != '' }} 45 | uses: paketo-buildpacks/github-config/actions/pull-request/open@main 46 | with: 47 | token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 48 | title: "Updating builder.toml" 49 | branch: "automation/builder-toml" 50 | 51 | failure: 52 | name: Alert on Failure 53 | runs-on: ubuntu-22.04 54 | needs: [update] 55 | if: ${{ always() && needs.update.result == 'failure' }} 56 | steps: 57 | - name: File Failure Alert Issue 58 | uses: paketo-buildpacks/github-config/actions/issue/file@main 59 | with: 60 | token: ${{ secrets.GITHUB_TOKEN }} 61 | repo: ${{ github.repository }} 62 | label: "failure:update-builder-toml" 63 | comment_if_exists: true 64 | issue_title: "Failure: Update Builder TOML workflow" 65 | issue_body: | 66 | Update Builder TOML workflow [failed](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). 67 | comment_body: | 68 | Another failure occurred: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} 69 | -------------------------------------------------------------------------------- /.github/workflows/update-github-config.yml: -------------------------------------------------------------------------------- 1 | name: Update shared github-config 2 | 3 | on: 4 | schedule: 5 | - cron: '30 0 * * *' 6 | workflow_dispatch: {} 7 | 8 | concurrency: github_config_update 9 | 10 | jobs: 11 | build: 12 | name: Create PR to update shared files 13 | runs-on: ubuntu-22.04 14 | steps: 15 | 16 | - name: Checkout 17 | uses: actions/checkout@v3 18 | with: 19 | token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 20 | 21 | - name: Checkout github-config 22 | uses: actions/checkout@v3 23 | with: 24 | repository: paketo-buildpacks/github-config 25 | path: github-config 26 | 27 | - name: Checkout Branch 28 | uses: paketo-buildpacks/github-config/actions/pull-request/checkout-branch@main 29 | with: 30 | branch: automation/github-config/update 31 | 32 | - name: Run the sync action 33 | uses: paketo-buildpacks/github-config/actions/sync@main 34 | with: 35 | workspace: /github/workspace 36 | config: /github/workspace/github-config/builder 37 | 38 | - name: Cleanup 39 | run: rm -rf github-config 40 | 41 | - name: Commit 42 | id: commit 43 | uses: paketo-buildpacks/github-config/actions/pull-request/create-commit@main 44 | with: 45 | message: "Updating github-config" 46 | pathspec: "." 47 | keyid: ${{ secrets.PAKETO_BOT_GPG_SIGNING_KEY_ID }} 48 | key: ${{ secrets.PAKETO_BOT_GPG_SIGNING_KEY }} 49 | 50 | - name: Push Branch 51 | if: ${{ steps.commit.outputs.commit_sha != '' }} 52 | uses: paketo-buildpacks/github-config/actions/pull-request/push-branch@main 53 | with: 54 | branch: automation/github-config/update 55 | 56 | - name: Open Pull Request 57 | if: ${{ steps.commit.outputs.commit_sha != '' }} 58 | uses: paketo-buildpacks/github-config/actions/pull-request/open@main 59 | with: 60 | token: ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }} 61 | title: "Updates github-config" 62 | branch: automation/github-config/update 63 | 64 | failure: 65 | name: Alert on Failure 66 | runs-on: ubuntu-22.04 67 | needs: [build] 68 | if: ${{ always() && needs.build.result == 'failure' }} 69 | steps: 70 | - name: File Failure Alert Issue 71 | uses: paketo-buildpacks/github-config/actions/issue/file@main 72 | with: 73 | token: ${{ secrets.GITHUB_TOKEN }} 74 | repo: ${{ github.repository }} 75 | label: "failure:update-github-config" 76 | comment_if_exists: true 77 | issue_title: "Failure: Update GitHub config workflow" 78 | issue_body: | 79 | Update GitHub config workflow [failed](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}). 80 | comment_body: | 81 | Another failure occurred: https://github.com/${{github.repository}}/actions/runs/${{github.run_id}} 82 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.bin 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Paketo Full Builder 2 | 3 | ## ⚠️ This repository is archived. No further releases will be made! ⚠️ 4 | 5 | ## Use the [Paketo Jammy Full Builder](https://github.com/paketo-buildpacks/builder-jammy-full) instead. 6 | 7 | --- 8 | 9 | ## `paketobuildpacks/builder:full` 10 | 11 | This builder uses the [Paketo Full 12 | Stack](https://github.com/paketo-buildpacks/full-stack-release) (an Ubuntu 13 | bionic base image) with buildpacks for Java, .NET Core, NodeJS, Go, Python, 14 | PHP, Ruby, Apache HTTPD, NGINX, and Procfile. 15 | 16 | To see which versions of build and run images, buildpacks, and the lifecycle 17 | that are contained within a given builder version, see the 18 | [Releases](https://github.com/paketo-buildpacks/full-builder/releases) on this 19 | repo. This information is also available in the `builder.toml`. 20 | 21 | For more information about this builder and how to use it, visit the [Paketo 22 | builder documentation](https://paketo.io/docs/builders/). To learn about the 23 | stack included in this builder, visit the [Paketo stack 24 | documentation](https://paketo.io/docs/stacks/). 25 | -------------------------------------------------------------------------------- /builder.toml: -------------------------------------------------------------------------------- 1 | description = "Ubuntu bionic base image with buildpacks for Java, .NET Core, NodeJS, Go, Python, PHP, Ruby, Apache HTTPD, NGINX and Procfile" 2 | 3 | [[buildpacks]] 4 | uri = "docker://gcr.io/paketo-buildpacks/dotnet-core:0.38.0" 5 | version = "0.38.0" 6 | 7 | [[buildpacks]] 8 | uri = "docker://gcr.io/paketo-buildpacks/go:4.4.3" 9 | version = "4.4.3" 10 | 11 | [[buildpacks]] 12 | uri = "docker://gcr.io/paketo-buildpacks/java-native-image:8.12.0" 13 | version = "8.12.0" 14 | 15 | [[buildpacks]] 16 | uri = "docker://gcr.io/paketo-buildpacks/java:9.14.0" 17 | version = "9.14.0" 18 | 19 | [[buildpacks]] 20 | uri = "docker://gcr.io/paketo-buildpacks/nodejs:1.7.0" 21 | version = "1.7.0" 22 | 23 | [[buildpacks]] 24 | uri = "docker://gcr.io/paketo-buildpacks/php:2.9.1" 25 | version = "2.9.1" 26 | 27 | [[buildpacks]] 28 | uri = "docker://gcr.io/paketo-buildpacks/procfile:5.6.4" 29 | version = "5.6.4" 30 | 31 | [[buildpacks]] 32 | uri = "docker://gcr.io/paketo-buildpacks/python:2.13.0" 33 | version = "2.13.0" 34 | 35 | [[buildpacks]] 36 | uri = "docker://gcr.io/paketo-buildpacks/ruby:0.38.1" 37 | version = "0.38.1" 38 | 39 | [[buildpacks]] 40 | uri = "docker://gcr.io/paketo-buildpacks/web-servers:0.17.1" 41 | version = "0.17.1" 42 | 43 | [lifecycle] 44 | version = "0.16.5" 45 | 46 | [[order]] 47 | 48 | [[order.group]] 49 | id = "paketo-buildpacks/ruby" 50 | version = "0.38.1" 51 | 52 | [[order]] 53 | 54 | [[order.group]] 55 | id = "paketo-buildpacks/dotnet-core" 56 | version = "0.38.0" 57 | 58 | [[order]] 59 | 60 | [[order.group]] 61 | id = "paketo-buildpacks/go" 62 | version = "4.4.3" 63 | 64 | [[order]] 65 | 66 | [[order.group]] 67 | id = "paketo-buildpacks/python" 68 | version = "2.13.0" 69 | 70 | [[order]] 71 | 72 | [[order.group]] 73 | id = "paketo-buildpacks/php" 74 | version = "2.9.1" 75 | 76 | [[order]] 77 | 78 | [[order.group]] 79 | id = "paketo-buildpacks/web-servers" 80 | version = "0.17.1" 81 | 82 | [[order]] 83 | 84 | [[order.group]] 85 | id = "paketo-buildpacks/java-native-image" 86 | version = "8.12.0" 87 | 88 | [[order]] 89 | 90 | [[order.group]] 91 | id = "paketo-buildpacks/java" 92 | version = "9.14.0" 93 | 94 | [[order]] 95 | 96 | [[order.group]] 97 | id = "paketo-buildpacks/nodejs" 98 | version = "1.7.0" 99 | 100 | [[order]] 101 | 102 | [[order.group]] 103 | id = "paketo-buildpacks/procfile" 104 | version = "5.6.4" 105 | 106 | [stack] 107 | build-image = "docker.io/paketobuildpacks/build:1.3.177-full-cnb" 108 | id = "io.buildpacks.stacks.bionic" 109 | run-image = "index.docker.io/paketobuildpacks/run:full-cnb" 110 | run-image-mirrors = ["gcr.io/paketo-buildpacks/run:full-cnb"] 111 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/paketo-buildpacks/full-builder 2 | 3 | go 1.15 4 | 5 | require ( 6 | github.com/onsi/gomega v1.27.8 7 | github.com/paketo-buildpacks/occam v0.17.0 8 | github.com/sclevine/spec v1.4.0 9 | gotest.tools/v3 v3.4.0 // indirect 10 | ) 11 | -------------------------------------------------------------------------------- /scripts/.util/print.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eu 4 | set -o pipefail 5 | 6 | function util::print::title() { 7 | local blue reset message 8 | blue="\033[0;34m" 9 | reset="\033[0;39m" 10 | message="${1}" 11 | 12 | echo -e "\n${blue}${message}${reset}" >&2 13 | } 14 | 15 | function util::print::info() { 16 | local message 17 | message="${1}" 18 | 19 | echo -e "${message}" >&2 20 | } 21 | 22 | function util::print::error() { 23 | local message red reset 24 | message="${1}" 25 | red="\033[0;31m" 26 | reset="\033[0;39m" 27 | 28 | echo -e "${red}${message}${reset}" >&2 29 | exit 1 30 | } 31 | 32 | function util::print::success() { 33 | local message green reset 34 | message="${1}" 35 | green="\033[0;32m" 36 | reset="\033[0;39m" 37 | 38 | echo -e "${green}${message}${reset}" >&2 39 | exitcode="${2:-0}" 40 | exit "${exitcode}" 41 | } 42 | 43 | function util::print::warn() { 44 | local message yellow reset 45 | message="${1}" 46 | yellow="\033[0;33m" 47 | reset="\033[0;39m" 48 | 49 | echo -e "${yellow}${message}${reset}" >&2 50 | exit 0 51 | } 52 | -------------------------------------------------------------------------------- /scripts/.util/tools.json: -------------------------------------------------------------------------------- 1 | { 2 | "pack": "v0.29.0" 3 | } 4 | -------------------------------------------------------------------------------- /scripts/.util/tools.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eu 4 | set -o pipefail 5 | 6 | # shellcheck source=SCRIPTDIR/print.sh 7 | source "$(dirname "${BASH_SOURCE[0]}")/print.sh" 8 | 9 | function util::tools::os() { 10 | case "$(uname)" in 11 | "Darwin") 12 | echo "${1:-darwin}" 13 | ;; 14 | 15 | "Linux") 16 | echo "linux" 17 | ;; 18 | 19 | *) 20 | util::print::error "Unknown OS \"$(uname)\"" 21 | exit 1 22 | esac 23 | } 24 | 25 | function util::tools::arch() { 26 | case "$(uname -m)" in 27 | arm64|aarch64) 28 | echo "arm64" 29 | ;; 30 | 31 | amd64|x86_64) 32 | if [[ "${1:-}" == "--blank-amd64" ]]; then 33 | echo "" 34 | else 35 | echo "amd64" 36 | fi 37 | ;; 38 | 39 | *) 40 | util::print::error "Unknown Architecture \"$(uname -m)\"" 41 | exit 1 42 | esac 43 | } 44 | 45 | function util::tools::path::export() { 46 | local dir 47 | dir="${1}" 48 | 49 | if ! echo "${PATH}" | grep -q "${dir}"; then 50 | PATH="${dir}:$PATH" 51 | export PATH 52 | fi 53 | } 54 | 55 | function util::tools::jam::install() { 56 | local dir token 57 | token="" 58 | 59 | while [[ "${#}" != 0 ]]; do 60 | case "${1}" in 61 | --directory) 62 | dir="${2}" 63 | shift 2 64 | ;; 65 | 66 | --token) 67 | token="${2}" 68 | shift 2 69 | ;; 70 | 71 | *) 72 | util::print::error "unknown argument \"${1}\"" 73 | esac 74 | done 75 | 76 | mkdir -p "${dir}" 77 | util::tools::path::export "${dir}" 78 | 79 | if [[ ! -f "${dir}/jam" ]]; then 80 | local version curl_args os arch 81 | 82 | version="$(jq -r .jam "$(dirname "${BASH_SOURCE[0]}")/tools.json")" 83 | 84 | curl_args=( 85 | "--fail" 86 | "--silent" 87 | "--location" 88 | "--output" "${dir}/jam" 89 | ) 90 | 91 | if [[ "${token}" != "" ]]; then 92 | curl_args+=("--header" "Authorization: Token ${token}") 93 | fi 94 | 95 | util::print::title "Installing jam ${version}" 96 | 97 | os=$(util::tools::os) 98 | arch=$(util::tools::arch) 99 | 100 | curl "https://github.com/paketo-buildpacks/jam/releases/download/${version}/jam-${os}-${arch}" \ 101 | "${curl_args[@]}" 102 | 103 | chmod +x "${dir}/jam" 104 | else 105 | util::print::title "Using $("${dir}"/jam version)" 106 | fi 107 | } 108 | 109 | function util::tools::pack::install() { 110 | local dir token 111 | token="" 112 | 113 | while [[ "${#}" != 0 ]]; do 114 | case "${1}" in 115 | --directory) 116 | dir="${2}" 117 | shift 2 118 | ;; 119 | 120 | --token) 121 | token="${2}" 122 | shift 2 123 | ;; 124 | 125 | *) 126 | util::print::error "unknown argument \"${1}\"" 127 | esac 128 | done 129 | 130 | mkdir -p "${dir}" 131 | util::tools::path::export "${dir}" 132 | 133 | if [[ ! -f "${dir}/pack" ]]; then 134 | local version curl_args os arch 135 | 136 | version="$(jq -r .pack "$(dirname "${BASH_SOURCE[0]}")/tools.json")" 137 | 138 | tmp_location="/tmp/pack.tgz" 139 | curl_args=( 140 | "--fail" 141 | "--silent" 142 | "--location" 143 | "--output" "${tmp_location}" 144 | ) 145 | 146 | if [[ "${token}" != "" ]]; then 147 | curl_args+=("--header" "Authorization: Token ${token}") 148 | fi 149 | 150 | util::print::title "Installing pack ${version}" 151 | 152 | os=$(util::tools::os macos) 153 | arch=$(util::tools::arch --blank-amd64) 154 | 155 | curl "https://github.com/buildpacks/pack/releases/download/${version}/pack-${version}-${os}${arch:+-$arch}.tgz" \ 156 | "${curl_args[@]}" 157 | 158 | tar xzf "${tmp_location}" -C "${dir}" 159 | chmod +x "${dir}/pack" 160 | 161 | rm "${tmp_location}" 162 | else 163 | util::print::info "Using pack $("${dir}"/pack version)" 164 | fi 165 | } 166 | 167 | function util::tools::tests::checkfocus() { 168 | testout="${1}" 169 | if grep -q 'Focused: [1-9]' "${testout}"; then 170 | echo "Detected Focused Test(s) - setting exit code to 197" 171 | rm "${testout}" 172 | util::print::success "** GO Test Succeeded **" 197 173 | fi 174 | rm "${testout}" 175 | } 176 | -------------------------------------------------------------------------------- /scripts/smoke.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eu 4 | set -o pipefail 5 | 6 | readonly PROGDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 7 | readonly BUILDERDIR="$(cd "${PROGDIR}/.." && pwd)" 8 | 9 | # shellcheck source=SCRIPTDIR/.util/tools.sh 10 | source "${PROGDIR}/.util/tools.sh" 11 | 12 | # shellcheck source=SCRIPTDIR/.util/print.sh 13 | source "${PROGDIR}/.util/print.sh" 14 | 15 | function main() { 16 | local name token 17 | token="" 18 | 19 | while [[ "${#}" != 0 ]]; do 20 | case "${1}" in 21 | --help|-h) 22 | shift 1 23 | usage 24 | exit 0 25 | ;; 26 | 27 | --name|-n) 28 | name="${2}" 29 | shift 2 30 | ;; 31 | 32 | --token|-t) 33 | token="${2}" 34 | shift 2 35 | ;; 36 | 37 | "") 38 | # skip if the argument is empty 39 | shift 1 40 | ;; 41 | 42 | *) 43 | util::print::error "unknown argument \"${1}\"" 44 | esac 45 | done 46 | 47 | if [[ ! -d "${BUILDERDIR}/smoke" ]]; then 48 | util::print::warn "** WARNING No Smoke tests **" 49 | fi 50 | 51 | if [[ -z "${name:-}" ]]; then 52 | name="testbuilder" 53 | fi 54 | 55 | tools::install "${token}" 56 | 57 | builder::create "${name}" 58 | image::pull::lifecycle "${name}" 59 | tests::run "${name}" 60 | } 61 | 62 | function usage() { 63 | cat <<-USAGE 64 | smoke.sh [OPTIONS] 65 | 66 | Runs the smoke test suite. 67 | 68 | OPTIONS 69 | --help -h prints the command usage 70 | --name -n sets the name of the builder that is built for testing 71 | --token Token used to download assets from GitHub (e.g. jam, pack, etc) (optional) 72 | USAGE 73 | } 74 | 75 | function tools::install() { 76 | local token 77 | token="${1}" 78 | 79 | util::tools::pack::install \ 80 | --directory "${BUILDERDIR}/.bin" \ 81 | --token "${token}" 82 | } 83 | 84 | function builder::create() { 85 | local name 86 | name="${1}" 87 | 88 | util::print::title "Creating builder..." 89 | pack builder create "${name}" --config "${BUILDERDIR}/builder.toml" 90 | } 91 | 92 | function image::pull::lifecycle() { 93 | local name lifecycle_image 94 | name="${1}" 95 | 96 | lifecycle_image="index.docker.io/buildpacksio/lifecycle:$( 97 | pack builder inspect "${name}" --output json \ 98 | | jq -r '.local_info.lifecycle.version' 99 | )" 100 | 101 | util::print::title "Pulling lifecycle image..." 102 | docker pull "${lifecycle_image}" 103 | } 104 | 105 | function tests::run() { 106 | local name 107 | name="${1}" 108 | 109 | util::print::title "Run Builder Smoke Tests" 110 | 111 | export CGO_ENABLED=0 112 | testout=$(mktemp) 113 | pushd "${BUILDERDIR}" > /dev/null 114 | if GOMAXPROCS="${GOMAXPROCS:-4}" go test -count=1 -timeout 0 ./smoke/... -v -run Smoke --name "${name}" | tee "${testout}"; then 115 | util::tools::tests::checkfocus "${testout}" 116 | util::print::success "** GO Test Succeeded **" 117 | else 118 | util::print::error "** GO Test Failed **" 119 | fi 120 | popd > /dev/null 121 | } 122 | 123 | main "${@:-}" 124 | -------------------------------------------------------------------------------- /smoke/dotnet_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testDotnet(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Dotnet app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "dotnet")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for ASP.NET Core Runtime"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for .NET Execute"))) 74 | }) 75 | }) 76 | } 77 | -------------------------------------------------------------------------------- /smoke/go_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testGo(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Go app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "go")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Go Distribution"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Go Mod Vendor"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Go Build"))) 75 | }) 76 | }) 77 | } 78 | -------------------------------------------------------------------------------- /smoke/init_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "flag" 5 | "testing" 6 | "time" 7 | 8 | "github.com/onsi/gomega/format" 9 | "github.com/sclevine/spec" 10 | "github.com/sclevine/spec/report" 11 | 12 | . "github.com/onsi/gomega" 13 | ) 14 | 15 | var Builder string 16 | 17 | func init() { 18 | flag.StringVar(&Builder, "name", "", "") 19 | } 20 | 21 | func TestSmoke(t *testing.T) { 22 | format.MaxLength = 0 23 | Expect := NewWithT(t).Expect 24 | 25 | flag.Parse() 26 | 27 | Expect(Builder).NotTo(Equal("")) 28 | 29 | SetDefaultEventuallyTimeout(60 * time.Second) 30 | 31 | suite := spec.New("Smoke", spec.Parallel(), spec.Report(report.Terminal{})) 32 | suite("Dotnet", testDotnet) 33 | suite("Go", testGo) 34 | suite("Java Native Image", testJavaNativeImage) 35 | suite("Java", testJava) 36 | suite("Nodejs", testNodejs) 37 | suite("PHP", testPHP) 38 | suite("Procfile", testProcfile) 39 | suite("Python", testPython) 40 | suite("Ruby", testRuby) 41 | suite("Web Servers", testWebServers) 42 | suite.Run(t) 43 | } 44 | -------------------------------------------------------------------------------- /smoke/java_native_image_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testJavaNativeImage(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Java Native Image app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "java-native-image")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | WithEnv(map[string]string{"BP_NATIVE_IMAGE": "true", "BP_JVM_VERSION": "17", "BP_MAVEN_BUILD_ARGUMENTS": "-Pnative --batch-mode -Dmaven.test.skip=true --no-transfer-progress package", "USE_NATIVE_IMAGE_JAVA_PLATFORM_MODULE_SYSTEM": "false"}). 62 | Execute(name, source) 63 | Expect(err).ToNot(HaveOccurred(), logs.String) 64 | 65 | container, err = docker.Container.Run. 66 | WithEnv(map[string]string{"PORT": "8080"}). 67 | WithPublish("8080"). 68 | Execute(image.ID) 69 | Expect(err).NotTo(HaveOccurred()) 70 | 71 | Eventually(container).Should(BeAvailable()) 72 | 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for BellSoft Liberica"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Maven"))) 75 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Executable JAR"))) 76 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Spring Boot"))) 77 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Native Image"))) 78 | }) 79 | }) 80 | } 81 | -------------------------------------------------------------------------------- /smoke/java_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testJava(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Java app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "java")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for BellSoft Liberica"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Executable JAR"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Spring Boot"))) 75 | }) 76 | }) 77 | } 78 | -------------------------------------------------------------------------------- /smoke/nodejs_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testNodejs(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Nodejs app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "nodejs")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Node Engine"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for NPM Install"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for NPM Start"))) 75 | }) 76 | }) 77 | } 78 | -------------------------------------------------------------------------------- /smoke/php_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testPHP(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a PHP app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "php")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithEnv(map[string]string{ 61 | "BP_PHP_WEB_DIR": "htdocs", 62 | }). 63 | WithBuilder(Builder). 64 | Execute(name, source) 65 | Expect(err).ToNot(HaveOccurred(), logs.String) 66 | 67 | container, err = docker.Container.Run. 68 | WithEnv(map[string]string{"PORT": "8080"}). 69 | WithPublish("8080"). 70 | Execute(image.ID) 71 | Expect(err).NotTo(HaveOccurred()) 72 | 73 | Eventually(container).Should(BeAvailable()) 74 | 75 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for PHP Distribution"))) 76 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for PHP Built-in Server"))) 77 | }) 78 | }) 79 | } 80 | -------------------------------------------------------------------------------- /smoke/procfile_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testProcfile(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Procfile app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "procfile")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Procfile"))) 73 | }) 74 | }) 75 | } 76 | -------------------------------------------------------------------------------- /smoke/python_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testPython(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Python app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "python")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for CPython"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Pipenv"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Pipenv Install"))) 75 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Python Start"))) 76 | }) 77 | }) 78 | } 79 | -------------------------------------------------------------------------------- /smoke/ruby_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testRuby(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a Ruby app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "ruby")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for MRI"))) 73 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Bundler"))) 74 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Bundle Install"))) 75 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Puma"))) 76 | }) 77 | }) 78 | } 79 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | using System.Net; 7 | using System.Net.Sockets; 8 | 9 | namespace dotnet 10 | { 11 | class Program 12 | { 13 | static void Main(string[] args) 14 | { 15 | string port = Environment.GetEnvironmentVariable("PORT"); 16 | TcpListener server = new TcpListener(IPAddress.Any, Int32.Parse(port)); 17 | 18 | server.Start(); 19 | 20 | while (true) 21 | { 22 | TcpClient client = server.AcceptTcpClient(); 23 | NetworkStream ns = client.GetStream(); 24 | 25 | string document = @" 26 | 27 | 28 | Powered By Paketo Buildpacks 29 | 30 | 31 | 32 | 33 | "; 34 | string payload = @"HTTP/1.1 200 OK 35 | Accept-Ranges: bytes 36 | Content-Length: " + System.Text.ASCIIEncoding.Unicode.GetByteCount(document) + @" 37 | Connection: close 38 | Content-Type: text/html; charset=utf-8 39 | 40 | " + document; 41 | 42 | byte[] msg = new byte[System.Text.ASCIIEncoding.Unicode.GetByteCount(payload)]; 43 | msg = Encoding.Default.GetBytes(payload); 44 | ns.Write(msg, 0, msg.Length); 45 | 46 | client.Close(); 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/README.md: -------------------------------------------------------------------------------- 1 | # Dotnet Core Sample App 2 | 3 | ## Building 4 | 5 | `pack build dotnet-runtime-sample --buildpack gcr.io/paketo-buildpacks/dotnet-core` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --env PORT=8080 --publish 8080:8080 dotnet-runtime-sample` 10 | 11 | ## Viewing 12 | 13 | `curl http://localhost:8080` 14 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/dotnet.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net6.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/obj/dotnet.csproj.nuget.dgspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "format": 1, 3 | "restore": { 4 | "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj": {} 5 | }, 6 | "projects": { 7 | "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj": { 8 | "version": "1.0.0", 9 | "restore": { 10 | "projectUniqueName": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj", 11 | "projectName": "dotnet", 12 | "projectPath": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj", 13 | "packagesPath": "/home/ubuntu/.nuget/packages/", 14 | "outputPath": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/obj/", 15 | "projectStyle": "PackageReference", 16 | "configFilePaths": [ 17 | "/home/ubuntu/.nuget/NuGet/NuGet.Config" 18 | ], 19 | "originalTargetFrameworks": [ 20 | "net6.0" 21 | ], 22 | "sources": { 23 | "https://api.nuget.org/v3/index.json": {} 24 | }, 25 | "frameworks": { 26 | "net6.0": { 27 | "targetAlias": "net6.0", 28 | "projectReferences": {} 29 | } 30 | }, 31 | "warningProperties": { 32 | "warnAsError": [ 33 | "NU1605" 34 | ] 35 | } 36 | }, 37 | "frameworks": { 38 | "net6.0": { 39 | "targetAlias": "net6.0", 40 | "imports": [ 41 | "net461", 42 | "net462", 43 | "net47", 44 | "net471", 45 | "net472", 46 | "net48", 47 | "net481" 48 | ], 49 | "assetTargetFallback": true, 50 | "warn": true, 51 | "frameworkReferences": { 52 | "Microsoft.NETCore.App": { 53 | "privateAssets": "all" 54 | } 55 | }, 56 | "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/6.0.404/RuntimeIdentifierGraph.json" 57 | } 58 | } 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /smoke/testdata/dotnet/obj/dotnet.csproj.nuget.g.props: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | True 5 | NuGet 6 | $(MSBuildThisFileDirectory)project.assets.json 7 | /home/ubuntu/.nuget/packages/ 8 | /home/ubuntu/.nuget/packages/ 9 | PackageReference 10 | 6.3.1 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/obj/dotnet.csproj.nuget.g.targets: -------------------------------------------------------------------------------- 1 |  2 | -------------------------------------------------------------------------------- /smoke/testdata/dotnet/obj/project.assets.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "targets": { 4 | "net6.0": {} 5 | }, 6 | "libraries": {}, 7 | "projectFileDependencyGroups": { 8 | "net6.0": [] 9 | }, 10 | "packageFolders": { 11 | "/home/ubuntu/.nuget/packages/": {} 12 | }, 13 | "project": { 14 | "version": "1.0.0", 15 | "restore": { 16 | "projectUniqueName": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj", 17 | "projectName": "dotnet", 18 | "projectPath": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj", 19 | "packagesPath": "/home/ubuntu/.nuget/packages/", 20 | "outputPath": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/obj/", 21 | "projectStyle": "PackageReference", 22 | "configFilePaths": [ 23 | "/home/ubuntu/.nuget/NuGet/NuGet.Config" 24 | ], 25 | "originalTargetFrameworks": [ 26 | "net6.0" 27 | ], 28 | "sources": { 29 | "https://api.nuget.org/v3/index.json": {} 30 | }, 31 | "frameworks": { 32 | "net6.0": { 33 | "targetAlias": "net6.0", 34 | "projectReferences": {} 35 | } 36 | }, 37 | "warningProperties": { 38 | "warnAsError": [ 39 | "NU1605" 40 | ] 41 | } 42 | }, 43 | "frameworks": { 44 | "net6.0": { 45 | "targetAlias": "net6.0", 46 | "imports": [ 47 | "net461", 48 | "net462", 49 | "net47", 50 | "net471", 51 | "net472", 52 | "net48", 53 | "net481" 54 | ], 55 | "assetTargetFallback": true, 56 | "warn": true, 57 | "frameworkReferences": { 58 | "Microsoft.NETCore.App": { 59 | "privateAssets": "all" 60 | } 61 | }, 62 | "runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/6.0.404/RuntimeIdentifierGraph.json" 63 | } 64 | } 65 | } 66 | } -------------------------------------------------------------------------------- /smoke/testdata/dotnet/obj/project.nuget.cache: -------------------------------------------------------------------------------- 1 | { 2 | "version": 2, 3 | "dgSpecHash": "2aFnD4DnC6CqdvsaM9JCv1xg28lVvfAFmGPsNrr2S7DCjP+xqBc1chTgokmcBJR6YyWF89CJoDrjoD5Wkv69mQ==", 4 | "success": true, 5 | "projectFilePath": "/home/ubuntu/workspace/paketo-buildpacks/base-builder/smoke/testdata/dotnet/dotnet.csproj", 6 | "expectedPackageFiles": [], 7 | "logs": [] 8 | } -------------------------------------------------------------------------------- /smoke/testdata/go/.gitignore: -------------------------------------------------------------------------------- 1 | !vendor 2 | -------------------------------------------------------------------------------- /smoke/testdata/go/README.md: -------------------------------------------------------------------------------- 1 | # Go Sample App using Mod 2 | 3 | ## Building 4 | 5 | `pack build mod-sample --buildpack gcr.io/paketo-buildpacks/go` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --env PORT=8080 --publish 8080:8080 mod-sample` 10 | 11 | ## Viewing 12 | 13 | `curl http://localhost:8080` 14 | -------------------------------------------------------------------------------- /smoke/testdata/go/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/paketo-buildpacks/samples/go/mod 2 | 3 | go 1.15 4 | 5 | require github.com/gorilla/mux v1.8.0 6 | -------------------------------------------------------------------------------- /smoke/testdata/go/go.sum: -------------------------------------------------------------------------------- 1 | github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= 2 | github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= 3 | -------------------------------------------------------------------------------- /smoke/testdata/go/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "log" 6 | "net/http" 7 | "os" 8 | 9 | "github.com/gorilla/mux" 10 | ) 11 | 12 | const INDEX = ` 13 | 14 | 15 | Powered By Paketo Buildpacks 16 | 17 | 18 | 19 | 20 | ` 21 | 22 | func main() { 23 | router := mux.NewRouter() 24 | router.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { 25 | fmt.Fprintln(w, INDEX) 26 | }) 27 | 28 | log.Fatal(http.ListenAndServe(":"+os.Getenv("PORT"), router)) 29 | } 30 | -------------------------------------------------------------------------------- /smoke/testdata/httpd/README.md: -------------------------------------------------------------------------------- 1 | # HTTPD Server Sample Application 2 | 3 | ## Building 4 | 5 | ```bash 6 | pack build my-httpd-app --buildpack gcr.io/paketo-buildpacks/httpd --builder paketobuildpacks/builder:full 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run --tty --env PORT=8080 --publish 8080:8080 my-httpd-app 13 | ``` 14 | 15 | ## Viewing 16 | 17 | ```bash 18 | curl -s localhost:8080 19 | ``` 20 | -------------------------------------------------------------------------------- /smoke/testdata/httpd/htdocs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Powered By Paketo Buildpacks 5 | 6 | 7 | 8 | 9 | ` 10 | -------------------------------------------------------------------------------- /smoke/testdata/httpd/httpd.conf: -------------------------------------------------------------------------------- 1 | ServerRoot "${SERVER_ROOT}" 2 | Listen "${PORT}" 3 | ServerAdmin "test@example.com" 4 | ServerName "0.0.0.0" 5 | DocumentRoot "${APP_ROOT}/htdocs" 6 | 7 | LoadModule authz_core_module modules/mod_authz_core.so 8 | LoadModule authz_host_module modules/mod_authz_host.so 9 | LoadModule log_config_module modules/mod_log_config.so 10 | LoadModule env_module modules/mod_env.so 11 | LoadModule setenvif_module modules/mod_setenvif.so 12 | LoadModule dir_module modules/mod_dir.so 13 | LoadModule mime_module modules/mod_mime.so 14 | LoadModule reqtimeout_module modules/mod_reqtimeout.so 15 | LoadModule unixd_module modules/mod_unixd.so 16 | LoadModule mpm_event_module modules/mod_mpm_event.so 17 | LoadModule remoteip_module modules/mod_remoteip.so 18 | LoadModule rewrite_module modules/mod_rewrite.so 19 | LoadModule filter_module modules/mod_filter.so 20 | LoadModule deflate_module modules/mod_deflate.so 21 | LoadModule headers_module modules/mod_headers.so 22 | 23 | 24 | AllowOverride none 25 | Require all denied 26 | 27 | 28 | 29 | Options SymLinksIfOwnerMatch 30 | AllowOverride All 31 | Require all granted 32 | 33 | 34 | 35 | Require all denied 36 | 37 | 38 | 39 | DirectoryIndex index.html 40 | 41 | 42 | TypesConfig conf/mime.types 43 | AddType application/x-compress .Z 44 | AddType application/x-gzip .gz .tgz 45 | 46 | 47 | 48 | 49 | AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript 50 | 51 | 52 | 53 | ErrorLog "/proc/self/fd/2" 54 | LogLevel info 55 | 56 | LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 57 | LogFormat "%a %l %u %t \"%r\" %>s %b" common 58 | LogFormat "%a %l %u %t \"%r\" %>s %b vcap_request_id=%{X-Vcap-Request-Id}i peer_addr=%{c}a" extended 59 | 60 | LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio 61 | 62 | CustomLog "/proc/self/fd/1" extended 63 | 64 | 65 | 66 | PidFile "logs/httpd.pid" 67 | 68 | 69 | StartServers 3 70 | MinSpareThreads 75 71 | MaxSpareThreads 250 72 | ThreadsPerChild 25 73 | MaxRequestWorkers 400 74 | MaxConnectionsPerChild 0 75 | 76 | 77 | StartServers 3 78 | MinSpareThreads 75 79 | MaxSpareThreads 250 80 | ThreadsPerChild 25 81 | MaxRequestWorkers 400 82 | MaxConnectionsPerChild 0 83 | 84 | 85 | MaxMemFree 2048 86 | 87 | 88 | Timeout 60 89 | KeepAlive On 90 | MaxKeepAliveRequests 100 91 | KeepAliveTimeout 5 92 | UseCanonicalName Off 93 | UseCanonicalPhysicalPort Off 94 | AccessFileName .htaccess 95 | ServerTokens Prod 96 | ServerSignature Off 97 | HostnameLookups Off 98 | EnableMMAP Off 99 | EnableSendfile On 100 | RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500 101 | 102 | # Adjust IP Address based on header set by proxy 103 | # 104 | RemoteIpHeader x-forwarded-for 105 | RemoteIpInternalProxy 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 106 | 107 | # Set HTTPS environment variable if we came in over secure 108 | # channel. 109 | SetEnvIf x-forwarded-proto https HTTPS=on 110 | 111 | 112 | LoadModule headers_module modules/mod_headers.so 113 | 114 | 115 | RequestHeader unset Proxy early 116 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/.mvn/wrapper/MavenWrapperDownloader.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2007-present the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | import java.net.*; 17 | import java.io.*; 18 | import java.nio.channels.*; 19 | import java.util.Properties; 20 | 21 | public class MavenWrapperDownloader { 22 | 23 | private static final String WRAPPER_VERSION = "0.5.6"; 24 | /** 25 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. 26 | */ 27 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" 28 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; 29 | 30 | /** 31 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to 32 | * use instead of the default one. 33 | */ 34 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH = 35 | ".mvn/wrapper/maven-wrapper.properties"; 36 | 37 | /** 38 | * Path where the maven-wrapper.jar will be saved to. 39 | */ 40 | private static final String MAVEN_WRAPPER_JAR_PATH = 41 | ".mvn/wrapper/maven-wrapper.jar"; 42 | 43 | /** 44 | * Name of the property which should be used to override the default download url for the wrapper. 45 | */ 46 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; 47 | 48 | public static void main(String args[]) { 49 | System.out.println("- Downloader started"); 50 | File baseDirectory = new File(args[0]); 51 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); 52 | 53 | // If the maven-wrapper.properties exists, read it and check if it contains a custom 54 | // wrapperUrl parameter. 55 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); 56 | String url = DEFAULT_DOWNLOAD_URL; 57 | if(mavenWrapperPropertyFile.exists()) { 58 | FileInputStream mavenWrapperPropertyFileInputStream = null; 59 | try { 60 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); 61 | Properties mavenWrapperProperties = new Properties(); 62 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); 63 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); 64 | } catch (IOException e) { 65 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); 66 | } finally { 67 | try { 68 | if(mavenWrapperPropertyFileInputStream != null) { 69 | mavenWrapperPropertyFileInputStream.close(); 70 | } 71 | } catch (IOException e) { 72 | // Ignore ... 73 | } 74 | } 75 | } 76 | System.out.println("- Downloading from: " + url); 77 | 78 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); 79 | if(!outputFile.getParentFile().exists()) { 80 | if(!outputFile.getParentFile().mkdirs()) { 81 | System.out.println( 82 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); 83 | } 84 | } 85 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); 86 | try { 87 | downloadFileFromURL(url, outputFile); 88 | System.out.println("Done"); 89 | System.exit(0); 90 | } catch (Throwable e) { 91 | System.out.println("- Error downloading"); 92 | e.printStackTrace(); 93 | System.exit(1); 94 | } 95 | } 96 | 97 | private static void downloadFileFromURL(String urlString, File destination) throws Exception { 98 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { 99 | String username = System.getenv("MVNW_USERNAME"); 100 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); 101 | Authenticator.setDefault(new Authenticator() { 102 | @Override 103 | protected PasswordAuthentication getPasswordAuthentication() { 104 | return new PasswordAuthentication(username, password); 105 | } 106 | }); 107 | } 108 | URL website = new URL(urlString); 109 | ReadableByteChannel rbc; 110 | rbc = Channels.newChannel(website.openStream()); 111 | FileOutputStream fos = new FileOutputStream(destination); 112 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 113 | fos.close(); 114 | rbc.close(); 115 | } 116 | 117 | } 118 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java-native-image/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/README.md: -------------------------------------------------------------------------------- 1 | # Java Native Image Sample Application 2 | 3 | ## Building 4 | 5 | ```bash 6 | pack build applications/native-image \ 7 | --builder paketobuildpacks/builder:tiny \ 8 | --env BP_NATIVE_IMAGE=true 9 | ``` 10 | 11 | ## Running 12 | 13 | ```bash 14 | docker run --rm --tty --publish 8080:8080 applications/native-image 15 | ``` 16 | 17 | ## Viewing 18 | 19 | ```bash 20 | curl -s http://localhost:8080/actuator/health | jq . 21 | ``` 22 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/mvnw: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ---------------------------------------------------------------------------- 3 | # Licensed to the Apache Software Foundation (ASF) under one 4 | # or more contributor license agreements. See the NOTICE file 5 | # distributed with this work for additional information 6 | # regarding copyright ownership. The ASF licenses this file 7 | # to you under the Apache License, Version 2.0 (the 8 | # "License"); you may not use this file except in compliance 9 | # with the License. You may obtain a copy of the License at 10 | # 11 | # https://www.apache.org/licenses/LICENSE-2.0 12 | # 13 | # Unless required by applicable law or agreed to in writing, 14 | # software distributed under the License is distributed on an 15 | # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 | # KIND, either express or implied. See the License for the 17 | # specific language governing permissions and limitations 18 | # under the License. 19 | # ---------------------------------------------------------------------------- 20 | 21 | # ---------------------------------------------------------------------------- 22 | # Maven Start Up Batch script 23 | # 24 | # Required ENV vars: 25 | # ------------------ 26 | # JAVA_HOME - location of a JDK home dir 27 | # 28 | # Optional ENV vars 29 | # ----------------- 30 | # M2_HOME - location of maven2's installed home dir 31 | # MAVEN_OPTS - parameters passed to the Java VM when running Maven 32 | # e.g. to debug Maven itself, use 33 | # set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 34 | # MAVEN_SKIP_RC - flag to disable loading of mavenrc files 35 | # ---------------------------------------------------------------------------- 36 | 37 | if [ -z "$MAVEN_SKIP_RC" ] ; then 38 | 39 | if [ -f /etc/mavenrc ] ; then 40 | . /etc/mavenrc 41 | fi 42 | 43 | if [ -f "$HOME/.mavenrc" ] ; then 44 | . "$HOME/.mavenrc" 45 | fi 46 | 47 | fi 48 | 49 | # OS specific support. $var _must_ be set to either true or false. 50 | cygwin=false; 51 | darwin=false; 52 | mingw=false 53 | case "`uname`" in 54 | CYGWIN*) cygwin=true ;; 55 | MINGW*) mingw=true;; 56 | Darwin*) darwin=true 57 | # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home 58 | # See https://developer.apple.com/library/mac/qa/qa1170/_index.html 59 | if [ -z "$JAVA_HOME" ]; then 60 | if [ -x "/usr/libexec/java_home" ]; then 61 | export JAVA_HOME="`/usr/libexec/java_home`" 62 | else 63 | export JAVA_HOME="/Library/Java/Home" 64 | fi 65 | fi 66 | ;; 67 | esac 68 | 69 | if [ -z "$JAVA_HOME" ] ; then 70 | if [ -r /etc/gentoo-release ] ; then 71 | JAVA_HOME=`java-config --jre-home` 72 | fi 73 | fi 74 | 75 | if [ -z "$M2_HOME" ] ; then 76 | ## resolve links - $0 may be a link to maven's home 77 | PRG="$0" 78 | 79 | # need this for relative symlinks 80 | while [ -h "$PRG" ] ; do 81 | ls=`ls -ld "$PRG"` 82 | link=`expr "$ls" : '.*-> \(.*\)$'` 83 | if expr "$link" : '/.*' > /dev/null; then 84 | PRG="$link" 85 | else 86 | PRG="`dirname "$PRG"`/$link" 87 | fi 88 | done 89 | 90 | saveddir=`pwd` 91 | 92 | M2_HOME=`dirname "$PRG"`/.. 93 | 94 | # make it fully qualified 95 | M2_HOME=`cd "$M2_HOME" && pwd` 96 | 97 | cd "$saveddir" 98 | # echo Using m2 at $M2_HOME 99 | fi 100 | 101 | # For Cygwin, ensure paths are in UNIX format before anything is touched 102 | if $cygwin ; then 103 | [ -n "$M2_HOME" ] && 104 | M2_HOME=`cygpath --unix "$M2_HOME"` 105 | [ -n "$JAVA_HOME" ] && 106 | JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 107 | [ -n "$CLASSPATH" ] && 108 | CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 109 | fi 110 | 111 | # For Mingw, ensure paths are in UNIX format before anything is touched 112 | if $mingw ; then 113 | [ -n "$M2_HOME" ] && 114 | M2_HOME="`(cd "$M2_HOME"; pwd)`" 115 | [ -n "$JAVA_HOME" ] && 116 | JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" 117 | fi 118 | 119 | if [ -z "$JAVA_HOME" ]; then 120 | javaExecutable="`which javac`" 121 | if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then 122 | # readlink(1) is not available as standard on Solaris 10. 123 | readLink=`which readlink` 124 | if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then 125 | if $darwin ; then 126 | javaHome="`dirname \"$javaExecutable\"`" 127 | javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" 128 | else 129 | javaExecutable="`readlink -f \"$javaExecutable\"`" 130 | fi 131 | javaHome="`dirname \"$javaExecutable\"`" 132 | javaHome=`expr "$javaHome" : '\(.*\)/bin'` 133 | JAVA_HOME="$javaHome" 134 | export JAVA_HOME 135 | fi 136 | fi 137 | fi 138 | 139 | if [ -z "$JAVACMD" ] ; then 140 | if [ -n "$JAVA_HOME" ] ; then 141 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 142 | # IBM's JDK on AIX uses strange locations for the executables 143 | JAVACMD="$JAVA_HOME/jre/sh/java" 144 | else 145 | JAVACMD="$JAVA_HOME/bin/java" 146 | fi 147 | else 148 | JAVACMD="`which java`" 149 | fi 150 | fi 151 | 152 | if [ ! -x "$JAVACMD" ] ; then 153 | echo "Error: JAVA_HOME is not defined correctly." >&2 154 | echo " We cannot execute $JAVACMD" >&2 155 | exit 1 156 | fi 157 | 158 | if [ -z "$JAVA_HOME" ] ; then 159 | echo "Warning: JAVA_HOME environment variable is not set." 160 | fi 161 | 162 | CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher 163 | 164 | # traverses directory structure from process work directory to filesystem root 165 | # first directory with .mvn subdirectory is considered project base directory 166 | find_maven_basedir() { 167 | 168 | if [ -z "$1" ] 169 | then 170 | echo "Path not specified to find_maven_basedir" 171 | return 1 172 | fi 173 | 174 | basedir="$1" 175 | wdir="$1" 176 | while [ "$wdir" != '/' ] ; do 177 | if [ -d "$wdir"/.mvn ] ; then 178 | basedir=$wdir 179 | break 180 | fi 181 | # workaround for JBEAP-8937 (on Solaris 10/Sparc) 182 | if [ -d "${wdir}" ]; then 183 | wdir=`cd "$wdir/.."; pwd` 184 | fi 185 | # end of workaround 186 | done 187 | echo "${basedir}" 188 | } 189 | 190 | # concatenates all lines of a file 191 | concat_lines() { 192 | if [ -f "$1" ]; then 193 | echo "$(tr -s '\n' ' ' < "$1")" 194 | fi 195 | } 196 | 197 | BASE_DIR=`find_maven_basedir "$(pwd)"` 198 | if [ -z "$BASE_DIR" ]; then 199 | exit 1; 200 | fi 201 | 202 | ########################################################################################## 203 | # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 204 | # This allows using the maven wrapper in projects that prohibit checking in binary data. 205 | ########################################################################################## 206 | if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then 207 | if [ "$MVNW_VERBOSE" = true ]; then 208 | echo "Found .mvn/wrapper/maven-wrapper.jar" 209 | fi 210 | else 211 | if [ "$MVNW_VERBOSE" = true ]; then 212 | echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." 213 | fi 214 | if [ -n "$MVNW_REPOURL" ]; then 215 | jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 216 | else 217 | jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 218 | fi 219 | while IFS="=" read key value; do 220 | case "$key" in (wrapperUrl) jarUrl="$value"; break ;; 221 | esac 222 | done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" 223 | if [ "$MVNW_VERBOSE" = true ]; then 224 | echo "Downloading from: $jarUrl" 225 | fi 226 | wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" 227 | if $cygwin; then 228 | wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` 229 | fi 230 | 231 | if command -v wget > /dev/null; then 232 | if [ "$MVNW_VERBOSE" = true ]; then 233 | echo "Found wget ... using wget" 234 | fi 235 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 236 | wget "$jarUrl" -O "$wrapperJarPath" 237 | else 238 | wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" 239 | fi 240 | elif command -v curl > /dev/null; then 241 | if [ "$MVNW_VERBOSE" = true ]; then 242 | echo "Found curl ... using curl" 243 | fi 244 | if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then 245 | curl -o "$wrapperJarPath" "$jarUrl" -f 246 | else 247 | curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f 248 | fi 249 | 250 | else 251 | if [ "$MVNW_VERBOSE" = true ]; then 252 | echo "Falling back to using Java to download" 253 | fi 254 | javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" 255 | # For Cygwin, switch paths to Windows format before running javac 256 | if $cygwin; then 257 | javaClass=`cygpath --path --windows "$javaClass"` 258 | fi 259 | if [ -e "$javaClass" ]; then 260 | if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 261 | if [ "$MVNW_VERBOSE" = true ]; then 262 | echo " - Compiling MavenWrapperDownloader.java ..." 263 | fi 264 | # Compiling the Java class 265 | ("$JAVA_HOME/bin/javac" "$javaClass") 266 | fi 267 | if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then 268 | # Running the downloader 269 | if [ "$MVNW_VERBOSE" = true ]; then 270 | echo " - Running MavenWrapperDownloader.java ..." 271 | fi 272 | ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") 273 | fi 274 | fi 275 | fi 276 | fi 277 | ########################################################################################## 278 | # End of extension 279 | ########################################################################################## 280 | 281 | export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} 282 | if [ "$MVNW_VERBOSE" = true ]; then 283 | echo $MAVEN_PROJECTBASEDIR 284 | fi 285 | MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" 286 | 287 | # For Cygwin, switch paths to Windows format before running java 288 | if $cygwin; then 289 | [ -n "$M2_HOME" ] && 290 | M2_HOME=`cygpath --path --windows "$M2_HOME"` 291 | [ -n "$JAVA_HOME" ] && 292 | JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 293 | [ -n "$CLASSPATH" ] && 294 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 295 | [ -n "$MAVEN_PROJECTBASEDIR" ] && 296 | MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` 297 | fi 298 | 299 | # Provide a "standardized" way to retrieve the CLI args that will 300 | # work with both Windows and non-Windows executions. 301 | MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" 302 | export MAVEN_CMD_LINE_ARGS 303 | 304 | WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 305 | 306 | exec "$JAVACMD" \ 307 | $MAVEN_OPTS \ 308 | -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ 309 | "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ 310 | ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" 311 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/mvnw.cmd: -------------------------------------------------------------------------------- 1 | @REM ---------------------------------------------------------------------------- 2 | @REM Licensed to the Apache Software Foundation (ASF) under one 3 | @REM or more contributor license agreements. See the NOTICE file 4 | @REM distributed with this work for additional information 5 | @REM regarding copyright ownership. The ASF licenses this file 6 | @REM to you under the Apache License, Version 2.0 (the 7 | @REM "License"); you may not use this file except in compliance 8 | @REM with the License. You may obtain a copy of the License at 9 | @REM 10 | @REM https://www.apache.org/licenses/LICENSE-2.0 11 | @REM 12 | @REM Unless required by applicable law or agreed to in writing, 13 | @REM software distributed under the License is distributed on an 14 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 | @REM KIND, either express or implied. See the License for the 16 | @REM specific language governing permissions and limitations 17 | @REM under the License. 18 | @REM ---------------------------------------------------------------------------- 19 | 20 | @REM ---------------------------------------------------------------------------- 21 | @REM Maven Start Up Batch script 22 | @REM 23 | @REM Required ENV vars: 24 | @REM JAVA_HOME - location of a JDK home dir 25 | @REM 26 | @REM Optional ENV vars 27 | @REM M2_HOME - location of maven2's installed home dir 28 | @REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands 29 | @REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending 30 | @REM MAVEN_OPTS - parameters passed to the Java VM when running Maven 31 | @REM e.g. to debug Maven itself, use 32 | @REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 33 | @REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files 34 | @REM ---------------------------------------------------------------------------- 35 | 36 | @REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' 37 | @echo off 38 | @REM set title of command window 39 | title %0 40 | @REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' 41 | @if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% 42 | 43 | @REM set %HOME% to equivalent of $HOME 44 | if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") 45 | 46 | @REM Execute a user defined script before this one 47 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre 48 | @REM check for pre script, once with legacy .bat ending and once with .cmd ending 49 | if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" 50 | if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" 51 | :skipRcPre 52 | 53 | @setlocal 54 | 55 | set ERROR_CODE=0 56 | 57 | @REM To isolate internal variables from possible post scripts, we use another setlocal 58 | @setlocal 59 | 60 | @REM ==== START VALIDATION ==== 61 | if not "%JAVA_HOME%" == "" goto OkJHome 62 | 63 | echo. 64 | echo Error: JAVA_HOME not found in your environment. >&2 65 | echo Please set the JAVA_HOME variable in your environment to match the >&2 66 | echo location of your Java installation. >&2 67 | echo. 68 | goto error 69 | 70 | :OkJHome 71 | if exist "%JAVA_HOME%\bin\java.exe" goto init 72 | 73 | echo. 74 | echo Error: JAVA_HOME is set to an invalid directory. >&2 75 | echo JAVA_HOME = "%JAVA_HOME%" >&2 76 | echo Please set the JAVA_HOME variable in your environment to match the >&2 77 | echo location of your Java installation. >&2 78 | echo. 79 | goto error 80 | 81 | @REM ==== END VALIDATION ==== 82 | 83 | :init 84 | 85 | @REM Find the project base dir, i.e. the directory that contains the folder ".mvn". 86 | @REM Fallback to current working directory if not found. 87 | 88 | set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% 89 | IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir 90 | 91 | set EXEC_DIR=%CD% 92 | set WDIR=%EXEC_DIR% 93 | :findBaseDir 94 | IF EXIST "%WDIR%"\.mvn goto baseDirFound 95 | cd .. 96 | IF "%WDIR%"=="%CD%" goto baseDirNotFound 97 | set WDIR=%CD% 98 | goto findBaseDir 99 | 100 | :baseDirFound 101 | set MAVEN_PROJECTBASEDIR=%WDIR% 102 | cd "%EXEC_DIR%" 103 | goto endDetectBaseDir 104 | 105 | :baseDirNotFound 106 | set MAVEN_PROJECTBASEDIR=%EXEC_DIR% 107 | cd "%EXEC_DIR%" 108 | 109 | :endDetectBaseDir 110 | 111 | IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig 112 | 113 | @setlocal EnableExtensions EnableDelayedExpansion 114 | for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a 115 | @endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% 116 | 117 | :endReadAdditionalConfig 118 | 119 | SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" 120 | set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" 121 | set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain 122 | 123 | set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 124 | 125 | FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( 126 | IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 127 | ) 128 | 129 | @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central 130 | @REM This allows using the maven wrapper in projects that prohibit checking in binary data. 131 | if exist %WRAPPER_JAR% ( 132 | if "%MVNW_VERBOSE%" == "true" ( 133 | echo Found %WRAPPER_JAR% 134 | ) 135 | ) else ( 136 | if not "%MVNW_REPOURL%" == "" ( 137 | SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" 138 | ) 139 | if "%MVNW_VERBOSE%" == "true" ( 140 | echo Couldn't find %WRAPPER_JAR%, downloading it ... 141 | echo Downloading from: %DOWNLOAD_URL% 142 | ) 143 | 144 | powershell -Command "&{"^ 145 | "$webclient = new-object System.Net.WebClient;"^ 146 | "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ 147 | "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ 148 | "}"^ 149 | "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ 150 | "}" 151 | if "%MVNW_VERBOSE%" == "true" ( 152 | echo Finished downloading %WRAPPER_JAR% 153 | ) 154 | ) 155 | @REM End of extension 156 | 157 | @REM Provide a "standardized" way to retrieve the CLI args that will 158 | @REM work with both Windows and non-Windows executions. 159 | set MAVEN_CMD_LINE_ARGS=%* 160 | 161 | %MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 162 | if ERRORLEVEL 1 goto error 163 | goto end 164 | 165 | :error 166 | set ERROR_CODE=1 167 | 168 | :end 169 | @endlocal & set ERROR_CODE=%ERROR_CODE% 170 | 171 | if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost 172 | @REM check for post script, once with legacy .bat ending and once with .cmd ending 173 | if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" 174 | if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" 175 | :skipRcPost 176 | 177 | @REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' 178 | if "%MAVEN_BATCH_PAUSE%" == "on" pause 179 | 180 | if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% 181 | 182 | exit /B %ERROR_CODE% 183 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.springframework.boot 7 | spring-boot-starter-parent 8 | 3.0.1 9 | 10 | 11 | io.paketo 12 | demo 13 | 0.0.1-SNAPSHOT 14 | demo 15 | Demo project for Spring Boot 16 | 17 | 18 | 17 19 | 20 | 21 | 22 | 23 | 24 | org.springframework.boot 25 | spring-boot-starter-actuator 26 | 27 | 28 | org.springframework.boot 29 | spring-boot-starter-webflux 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-starter-test 34 | test 35 | 36 | 37 | io.projectreactor 38 | reactor-test 39 | test 40 | 41 | 42 | 43 | 44 | 45 | 46 | org.graalvm.buildtools 47 | native-maven-plugin 48 | 49 | 50 | org.springframework.boot 51 | spring-boot-maven-plugin 52 | 53 | ${repackage.classifier} 54 | 55 | apps/native-image 56 | paketobuildpacks/builder:tiny 57 | 58 | true 59 | 17 60 | false 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/src/main/java/io/paketo/demo/DemoApplication.java: -------------------------------------------------------------------------------- 1 | package io.paketo.demo; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | @SpringBootApplication 7 | public class DemoApplication { 8 | 9 | public static void main(String[] args) { 10 | SpringApplication.run(DemoApplication.class, args); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /smoke/testdata/java-native-image/src/test/java/io/paketo/demo/DemoApplicationTests.java: -------------------------------------------------------------------------------- 1 | package io.paketo.demo; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest 7 | class DemoApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/classes/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/classes/io/paketo/demo/DemoApplication.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/classes/io/paketo/demo/DemoApplication.class -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/classpath.idx: -------------------------------------------------------------------------------- 1 | - "BOOT-INF/lib/spring-boot-2.5.12.jar" 2 | - "BOOT-INF/lib/spring-context-5.3.18.jar" 3 | - "BOOT-INF/lib/spring-aop-5.3.18.jar" 4 | - "BOOT-INF/lib/spring-expression-5.3.18.jar" 5 | - "BOOT-INF/lib/spring-boot-autoconfigure-2.5.12.jar" 6 | - "BOOT-INF/lib/logback-classic-1.2.11.jar" 7 | - "BOOT-INF/lib/logback-core-1.2.11.jar" 8 | - "BOOT-INF/lib/log4j-to-slf4j-2.17.2.jar" 9 | - "BOOT-INF/lib/log4j-api-2.17.2.jar" 10 | - "BOOT-INF/lib/jul-to-slf4j-1.7.36.jar" 11 | - "BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar" 12 | - "BOOT-INF/lib/snakeyaml-1.28.jar" 13 | - "BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.5.12.jar" 14 | - "BOOT-INF/lib/spring-boot-actuator-2.5.12.jar" 15 | - "BOOT-INF/lib/jackson-databind-2.12.6.1.jar" 16 | - "BOOT-INF/lib/jackson-annotations-2.12.6.jar" 17 | - "BOOT-INF/lib/jackson-core-2.12.6.jar" 18 | - "BOOT-INF/lib/jackson-datatype-jsr310-2.12.6.jar" 19 | - "BOOT-INF/lib/micrometer-core-1.7.10.jar" 20 | - "BOOT-INF/lib/HdrHistogram-2.1.12.jar" 21 | - "BOOT-INF/lib/LatencyUtils-2.0.3.jar" 22 | - "BOOT-INF/lib/jackson-datatype-jdk8-2.12.6.jar" 23 | - "BOOT-INF/lib/jackson-module-parameter-names-2.12.6.jar" 24 | - "BOOT-INF/lib/reactor-netty-http-1.0.17.jar" 25 | - "BOOT-INF/lib/netty-codec-http-4.1.75.Final.jar" 26 | - "BOOT-INF/lib/netty-common-4.1.75.Final.jar" 27 | - "BOOT-INF/lib/netty-buffer-4.1.75.Final.jar" 28 | - "BOOT-INF/lib/netty-transport-4.1.75.Final.jar" 29 | - "BOOT-INF/lib/netty-codec-4.1.75.Final.jar" 30 | - "BOOT-INF/lib/netty-handler-4.1.75.Final.jar" 31 | - "BOOT-INF/lib/netty-codec-http2-4.1.75.Final.jar" 32 | - "BOOT-INF/lib/netty-resolver-dns-4.1.75.Final.jar" 33 | - "BOOT-INF/lib/netty-resolver-4.1.75.Final.jar" 34 | - "BOOT-INF/lib/netty-codec-dns-4.1.75.Final.jar" 35 | - "BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.75.Final-osx-x86_64.jar" 36 | - "BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.75.Final.jar" 37 | - "BOOT-INF/lib/netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar" 38 | - "BOOT-INF/lib/netty-transport-native-unix-common-4.1.75.Final.jar" 39 | - "BOOT-INF/lib/netty-transport-classes-epoll-4.1.75.Final.jar" 40 | - "BOOT-INF/lib/reactor-netty-core-1.0.17.jar" 41 | - "BOOT-INF/lib/netty-handler-proxy-4.1.75.Final.jar" 42 | - "BOOT-INF/lib/netty-codec-socks-4.1.75.Final.jar" 43 | - "BOOT-INF/lib/spring-web-5.3.18.jar" 44 | - "BOOT-INF/lib/spring-beans-5.3.18.jar" 45 | - "BOOT-INF/lib/spring-webflux-5.3.18.jar" 46 | - "BOOT-INF/lib/slf4j-api-1.7.36.jar" 47 | - "BOOT-INF/lib/spring-core-5.3.18.jar" 48 | - "BOOT-INF/lib/spring-jcl-5.3.18.jar" 49 | - "BOOT-INF/lib/reactor-core-3.4.16.jar" 50 | - "BOOT-INF/lib/reactive-streams-1.0.3.jar" 51 | - "BOOT-INF/lib/spring-boot-jarmode-layertools-2.5.12.jar" 52 | -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/layers.idx: -------------------------------------------------------------------------------- 1 | - "dependencies": 2 | - "BOOT-INF/lib/" 3 | - "spring-boot-loader": 4 | - "org/" 5 | - "snapshot-dependencies": 6 | - "application": 7 | - "BOOT-INF/classes/" 8 | - "BOOT-INF/classpath.idx" 9 | - "BOOT-INF/layers.idx" 10 | - "META-INF/" 11 | -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/HdrHistogram-2.1.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/HdrHistogram-2.1.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/LatencyUtils-2.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/LatencyUtils-2.0.3.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-annotations-2.12.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-annotations-2.12.6.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-core-2.12.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-core-2.12.6.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-databind-2.12.6.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-databind-2.12.6.1.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-datatype-jdk8-2.12.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-datatype-jdk8-2.12.6.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-datatype-jsr310-2.12.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-datatype-jsr310-2.12.6.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jackson-module-parameter-names-2.12.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jackson-module-parameter-names-2.12.6.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jakarta.annotation-api-1.3.5.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/jul-to-slf4j-1.7.36.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/jul-to-slf4j-1.7.36.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/log4j-api-2.17.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/log4j-api-2.17.2.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/log4j-to-slf4j-2.17.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/log4j-to-slf4j-2.17.2.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/logback-classic-1.2.11.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/logback-classic-1.2.11.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/logback-core-1.2.11.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/logback-core-1.2.11.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/micrometer-core-1.7.10.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/micrometer-core-1.7.10.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-buffer-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-buffer-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-codec-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-codec-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-codec-dns-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-codec-dns-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-codec-http-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-codec-http-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-codec-http2-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-codec-http2-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-codec-socks-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-codec-socks-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-common-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-common-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-handler-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-handler-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-handler-proxy-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-handler-proxy-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-resolver-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-resolver-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-classes-macos-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.75.Final-osx-x86_64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-resolver-dns-native-macos-4.1.75.Final-osx-x86_64.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-transport-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-transport-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-transport-classes-epoll-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-transport-classes-epoll-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/netty-transport-native-unix-common-4.1.75.Final.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/netty-transport-native-unix-common-4.1.75.Final.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/reactive-streams-1.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/reactive-streams-1.0.3.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/reactor-core-3.4.16.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/reactor-core-3.4.16.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/reactor-netty-core-1.0.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/reactor-netty-core-1.0.17.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/reactor-netty-http-1.0.17.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/reactor-netty-http-1.0.17.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/slf4j-api-1.7.36.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/slf4j-api-1.7.36.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/snakeyaml-1.28.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/snakeyaml-1.28.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-aop-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-aop-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-beans-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-beans-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-boot-2.5.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-boot-2.5.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-boot-actuator-2.5.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-boot-actuator-2.5.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.5.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-boot-actuator-autoconfigure-2.5.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-boot-autoconfigure-2.5.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-boot-autoconfigure-2.5.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-boot-jarmode-layertools-2.5.12.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-boot-jarmode-layertools-2.5.12.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-context-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-context-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-core-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-core-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-expression-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-expression-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-jcl-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-jcl-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-web-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-web-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/BOOT-INF/lib/spring-webflux-5.3.18.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/BOOT-INF/lib/spring-webflux-5.3.18.jar -------------------------------------------------------------------------------- /smoke/testdata/java/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Created-By: Maven JAR Plugin 3.2.2 3 | Build-Jdk-Spec: 11 4 | Implementation-Title: demo 5 | Implementation-Version: 0.0.1-SNAPSHOT 6 | Main-Class: org.springframework.boot.loader.JarLauncher 7 | Start-Class: io.paketo.demo.DemoApplication 8 | Spring-Boot-Version: 2.5.12 9 | Spring-Boot-Classes: BOOT-INF/classes/ 10 | Spring-Boot-Lib: BOOT-INF/lib/ 11 | Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx 12 | Spring-Boot-Layers-Index: BOOT-INF/layers.idx 13 | 14 | -------------------------------------------------------------------------------- /smoke/testdata/java/META-INF/maven/io.paketo/demo/pom.properties: -------------------------------------------------------------------------------- 1 | artifactId=demo 2 | groupId=io.paketo 3 | version=0.0.1-SNAPSHOT 4 | -------------------------------------------------------------------------------- /smoke/testdata/java/META-INF/maven/io.paketo/demo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | org.springframework.boot 6 | spring-boot-starter-parent 7 | 2.5.12 8 | 9 | 10 | io.paketo 11 | demo 12 | 0.0.1-SNAPSHOT 13 | demo 14 | Demo project for Spring Boot 15 | 16 | 17 | 11 18 | 19 | 20 | 21 | 22 | org.springframework.boot 23 | spring-boot-starter-actuator 24 | 25 | 26 | org.springframework.boot 27 | spring-boot-starter-webflux 28 | 29 | 30 | 31 | org.springframework.boot 32 | spring-boot-starter-test 33 | test 34 | 35 | 36 | org.junit.vintage 37 | junit-vintage-engine 38 | 39 | 40 | 41 | 42 | io.projectreactor 43 | reactor-test 44 | test 45 | 46 | 47 | 48 | 49 | 50 | 51 | org.springframework.boot 52 | spring-boot-maven-plugin 53 | 54 | 55 | true 56 | 57 | 58 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /smoke/testdata/java/README.md: -------------------------------------------------------------------------------- 1 | # Pre-compiled Java Sample Application 2 | 3 | ## Building 4 | 5 | ```bash 6 | pack build applications/jar 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run --rm --tty --publish 8080:8080 applications/jar 13 | ``` 14 | 15 | ## Viewing 16 | 17 | ```bash 18 | curl -s http://localhost:8080/actuator/health | jq . 19 | ``` 20 | -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/ClassPathIndexFile.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/ClassPathIndexFile.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/ExecutableArchiveLauncher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/ExecutableArchiveLauncher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/JarLauncher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/JarLauncher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader$DefinePackageCallType.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/LaunchedURLClassLoader.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/Launcher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/Launcher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/MainMethodRunner.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/MainMethodRunner.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$ClassPathArchives.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/PropertiesLauncher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/WarLauncher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/WarLauncher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/Archive$Entry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/Archive$Entry.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/Archive$EntryFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/Archive$EntryFilter.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/Archive.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/Archive.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$AbstractIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$ArchiveIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$EntryIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive$SimpleJarFileArchive.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/ExplodedArchive.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$AbstractIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive$NestedArchiveIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/archive/JarFileArchive.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessData.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessData.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/data/RandomAccessDataFile.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/AbstractJarFile$JarFileType.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/AbstractJarFile.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/AbstractJarFile.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/AsciiBytes.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/AsciiBytes.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/Bytes.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/Bytes.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64End.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord$Zip64Locator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryParser.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryParser.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryVisitor.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/CentralDirectoryVisitor.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/FileHeader.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/FileHeader.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/Handler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/Handler.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarEntry.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarEntry.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarEntryCertification.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarEntryCertification.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarEntryFilter.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarEntryFilter.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFile$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFile$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFile$JarEntryEnumeration.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFile.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFile.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$Offsets.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$Offsets.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$Zip64Offsets.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries$ZipOffsets.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileEntries.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarFileWrapper.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarFileWrapper.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection$1.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection$1.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/JarURLConnection.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/StringSequence.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/StringSequence.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jar/ZipInflaterInputStream.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jar/ZipInflaterInputStream.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jarmode/JarMode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jarmode/JarMode.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jarmode/JarModeLauncher.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jarmode/JarModeLauncher.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/jarmode/TestJarMode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/jarmode/TestJarMode.class -------------------------------------------------------------------------------- /smoke/testdata/java/org/springframework/boot/loader/util/SystemPropertyUtils.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/java/org/springframework/boot/loader/util/SystemPropertyUtils.class -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/README.md: -------------------------------------------------------------------------------- 1 | # Getting Started with Create React App 2 | 3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 4 | 5 | ## Deploy and View 6 | Build this app into an OCI image using the Paketo Node.js and a web server 7 | buildpack (either HTTPD or NGINX). There are two [project 8 | descriptor](https://buildpacks.io/docs/app-developer-guide/using-project-descriptor/) 9 | files in this directory, `httpd.toml` and `nginx.toml`. Each contain the 10 | configuration necessary to build the React source code into static assets and 11 | serve those assets with the selected server. 12 | 13 | The HTTPD and NGINX buildpacks will automatically generate a default 14 | configuration file for the server. 15 | 16 | ### Build with `pack` | HTTPD 17 | ```bash 18 | pack build react-sample --descriptor httpd.toml 19 | ``` 20 | 21 | ### Build with `pack` | NGINX 22 | ```bash 23 | pack build react-sample --descriptor nginx.toml 24 | ``` 25 | 26 | ### Run the app 27 | ``` 28 | docker run -it -p 8080:8080 --env PORT=8080 react-sample 29 | ``` 30 | 31 | ### View the app 32 | Visit `localhost:8080` in your browser. Since push-state routing is enabled in 33 | this build with `BP_WEB_SERVER_ENABLE_PUSH_STATE`, visiting 34 | `localhost:8080/foo` – or any other endpoint – will serve the same page. 35 | 36 | ## Available Scripts 37 | 38 | In the project directory, you can run: 39 | 40 | ### `npm start` 41 | 42 | Runs the app in the development mode.\ 43 | Open [http://localhost:3000](http://localhost:3000) to view it in your browser. 44 | 45 | The page will reload when you make changes.\ 46 | You may also see any lint errors in the console. 47 | 48 | ### `npm run build` 49 | 50 | Builds the app for production to the `build` folder.\ 51 | It correctly bundles React in production mode and optimizes the build for the best performance. 52 | 53 | The build is minified and the filenames include the hashes.\ 54 | Your app is ready to be deployed! 55 | 56 | See the section about 57 | [deployment](https://facebook.github.io/create-react-app/docs/deployment) for 58 | more information. 59 | 60 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/httpd.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | exclude = [ 3 | "/README.md", 4 | ] 5 | 6 | [[build.buildpacks]] 7 | uri = "paketo-buildpacks/nodejs" 8 | 9 | [[build.buildpacks]] 10 | uri = "paketo-buildpacks/httpd" 11 | 12 | [[ build.env ]] 13 | name="BP_NODE_RUN_SCRIPTS" 14 | value="build" 15 | 16 | [[ build.env ]] 17 | name="BP_WEB_SERVER" 18 | value="httpd" 19 | 20 | [[ build.env ]] 21 | name="BP_WEB_SERVER_ROOT" 22 | value="build" 23 | 24 | [[ build.env ]] 25 | name="BP_WEB_SERVER_ENABLE_PUSH_STATE" 26 | value="true" 27 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/nginx.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | exclude = [ 3 | "/README.md", 4 | ] 5 | 6 | [[build.buildpacks]] 7 | uri = "paketo-buildpacks/nodejs" 8 | 9 | [[build.buildpacks]] 10 | uri = "paketo-buildpacks/nginx" 11 | 12 | [[ build.env ]] 13 | name="BP_NODE_RUN_SCRIPTS" 14 | value="build" 15 | 16 | [[ build.env ]] 17 | name="BP_WEB_SERVER" 18 | value="nginx" 19 | 20 | [[ build.env ]] 21 | name="BP_WEB_SERVER_ROOT" 22 | value="build" 23 | 24 | [[ build.env ]] 25 | name="BP_WEB_SERVER_ENABLE_PUSH_STATE" 26 | value="true" 27 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-nginx", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.16.4", 7 | "@testing-library/react": "^13.1.1", 8 | "@testing-library/user-event": "^13.5.0", 9 | "react": "^18.0.0", 10 | "react-dom": "^18.0.0", 11 | "react-scripts": "5.0.1", 12 | "web-vitals": "^2.1.4" 13 | }, 14 | "scripts": { 15 | "start": "react-scripts start", 16 | "build": "react-scripts build", 17 | "test": "react-scripts test", 18 | "eject": "react-scripts eject" 19 | }, 20 | "eslintConfig": { 21 | "extends": [ 22 | "react-app", 23 | "react-app/jest" 24 | ] 25 | }, 26 | "browserslist": { 27 | "production": [ 28 | ">0.2%", 29 | "not dead", 30 | "not op_mini all" 31 | ], 32 | "development": [ 33 | "last 1 chrome version", 34 | "last 1 firefox version", 35 | "last 1 safari version" 36 | ] 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/javascript-frontend/public/favicon.ico -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 21 | Paketo Buildpacks 22 | 23 | 24 | 25 |
26 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/src/App.css: -------------------------------------------------------------------------------- 1 | .App { 2 | font-size: large; 3 | text-align: center; 4 | } 5 | 6 | .App img { 7 | display: block; 8 | margin-left: auto; 9 | margin-right: auto; 10 | width: 50%; 11 | } 12 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/src/App.js: -------------------------------------------------------------------------------- 1 | import './App.css'; 2 | 3 | function App() { 4 | return
5 | Paketo Buildpacks logo 6 | Powered by Paketo Buildpacks 7 |
; 8 | } 9 | 10 | export default App; 11 | -------------------------------------------------------------------------------- /smoke/testdata/javascript-frontend/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import App from './App'; 4 | 5 | ReactDOM.render( 6 | 7 | 8 | , 9 | document.getElementById('root') 10 | ); 11 | -------------------------------------------------------------------------------- /smoke/testdata/nginx/README.md: -------------------------------------------------------------------------------- 1 | # NGINX Server Sample Application 2 | 3 | ## Building 4 | 5 | ```bash 6 | pack build my-nginx-app --buildpack gcr.io/paketo-buildpacks/nginx 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run --tty --env PORT=8080 --publish 8080:8080 my-nginx-app 13 | ``` 14 | 15 | ## Viewing 16 | 17 | ```bash 18 | curl -s localhost:8080 19 | ``` 20 | -------------------------------------------------------------------------------- /smoke/testdata/nginx/mime.types: -------------------------------------------------------------------------------- 1 | types { 2 | text/html html htm shtml; 3 | text/css css; 4 | text/xml xml; 5 | image/gif gif; 6 | image/jpeg jpeg jpg; 7 | application/x-javascript js; 8 | application/atom+xml atom; 9 | application/rss+xml rss; 10 | font/ttf ttf; 11 | font/woff woff; 12 | font/woff2 woff2; 13 | text/mathml mml; 14 | text/plain txt; 15 | text/vnd.sun.j2me.app-descriptor jad; 16 | text/vnd.wap.wml wml; 17 | text/x-component htc; 18 | text/cache-manifest manifest; 19 | image/png png; 20 | image/tiff tif tiff; 21 | image/vnd.wap.wbmp wbmp; 22 | image/x-icon ico; 23 | image/x-jng jng; 24 | image/x-ms-bmp bmp; 25 | image/svg+xml svg svgz; 26 | image/webp webp; 27 | application/java-archive jar war ear; 28 | application/mac-binhex40 hqx; 29 | application/msword doc; 30 | application/pdf pdf; 31 | application/postscript ps eps ai; 32 | application/rtf rtf; 33 | application/vnd.ms-excel xls; 34 | application/vnd.ms-powerpoint ppt; 35 | application/vnd.wap.wmlc wmlc; 36 | application/vnd.google-earth.kml+xml kml; 37 | application/vnd.google-earth.kmz kmz; 38 | application/x-7z-compressed 7z; 39 | application/x-cocoa cco; 40 | application/x-java-archive-diff jardiff; 41 | application/x-java-jnlp-file jnlp; 42 | application/x-makeself run; 43 | application/x-perl pl pm; 44 | application/x-pilot prc pdb; 45 | application/x-rar-compressed rar; 46 | application/x-redhat-package-manager rpm; 47 | application/x-sea sea; 48 | application/x-shockwave-flash swf; 49 | application/x-stuffit sit; 50 | application/x-tcl tcl tk; 51 | application/x-x509-ca-cert der pem crt; 52 | application/x-xpinstall xpi; 53 | application/xhtml+xml xhtml; 54 | application/zip zip; 55 | application/octet-stream bin exe dll; 56 | application/octet-stream deb; 57 | application/octet-stream dmg; 58 | application/octet-stream eot; 59 | application/octet-stream iso img; 60 | application/octet-stream msi msp msm; 61 | application/json json; 62 | audio/midi mid midi kar; 63 | audio/mpeg mp3; 64 | audio/ogg ogg; 65 | audio/x-m4a m4a; 66 | audio/x-realaudio ra; 67 | video/3gpp 3gpp 3gp; 68 | video/mp4 mp4; 69 | video/mpeg mpeg mpg; 70 | video/quicktime mov; 71 | video/webm webm; 72 | video/x-flv flv; 73 | video/x-m4v m4v; 74 | video/x-mng mng; 75 | video/x-ms-asf asx asf; 76 | video/x-ms-wmv wmv; 77 | video/x-msvideo avi; 78 | } 79 | -------------------------------------------------------------------------------- /smoke/testdata/nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | daemon off; 3 | 4 | error_log stderr; 5 | events { worker_connections 1024; } 6 | 7 | http { 8 | charset utf-8; 9 | log_format cloudfoundry 'NginxLog "$request" $status $body_bytes_sent'; 10 | access_log /dev/stdout cloudfoundry; 11 | default_type application/octet-stream; 12 | include mime.types; 13 | sendfile on; 14 | 15 | tcp_nopush on; 16 | keepalive_timeout 30; 17 | port_in_redirect off; # Ensure that redirects don't include the internal container PORT - 8080 18 | 19 | server { 20 | listen {{port}}; 21 | root public; 22 | index index.html index.htm Default.htm; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /smoke/testdata/nginx/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Powered By Paketo Buildpacks 5 | 6 | 7 | 8 | 9 | ` 10 | -------------------------------------------------------------------------------- /smoke/testdata/nodejs/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /smoke/testdata/nodejs/README.md: -------------------------------------------------------------------------------- 1 | # Node.js Sample App using NPM 2 | 3 | ## Building 4 | 5 | `pack build npm-sample --buildpack gcr.io/paketo-buildpacks/nodejs` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --publish 8080:8080 npm-sample` 10 | 11 | ## Viewing 12 | 13 | `curl http://localhost:8080` 14 | -------------------------------------------------------------------------------- /smoke/testdata/nodejs/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sample", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "accepts": { 8 | "version": "1.3.7", 9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", 10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", 11 | "requires": { 12 | "mime-types": "~2.1.24", 13 | "negotiator": "0.6.2" 14 | } 15 | }, 16 | "array-flatten": { 17 | "version": "1.1.1", 18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 20 | }, 21 | "body-parser": { 22 | "version": "1.19.0", 23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", 24 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", 25 | "requires": { 26 | "bytes": "3.1.0", 27 | "content-type": "~1.0.4", 28 | "debug": "2.6.9", 29 | "depd": "~1.1.2", 30 | "http-errors": "1.7.2", 31 | "iconv-lite": "0.4.24", 32 | "on-finished": "~2.3.0", 33 | "qs": "6.7.0", 34 | "raw-body": "2.4.0", 35 | "type-is": "~1.6.17" 36 | } 37 | }, 38 | "bytes": { 39 | "version": "3.1.0", 40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", 41 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" 42 | }, 43 | "content-disposition": { 44 | "version": "0.5.3", 45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", 46 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", 47 | "requires": { 48 | "safe-buffer": "5.1.2" 49 | } 50 | }, 51 | "content-type": { 52 | "version": "1.0.4", 53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 55 | }, 56 | "cookie": { 57 | "version": "0.4.0", 58 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", 59 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" 60 | }, 61 | "cookie-signature": { 62 | "version": "1.0.6", 63 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 64 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 65 | }, 66 | "debug": { 67 | "version": "2.6.9", 68 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 69 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 70 | "requires": { 71 | "ms": "2.0.0" 72 | } 73 | }, 74 | "depd": { 75 | "version": "1.1.2", 76 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 77 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 78 | }, 79 | "destroy": { 80 | "version": "1.0.4", 81 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 82 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 83 | }, 84 | "ee-first": { 85 | "version": "1.1.1", 86 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 87 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 88 | }, 89 | "encodeurl": { 90 | "version": "1.0.2", 91 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 92 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 93 | }, 94 | "escape-html": { 95 | "version": "1.0.3", 96 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 97 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 98 | }, 99 | "etag": { 100 | "version": "1.8.1", 101 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 102 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 103 | }, 104 | "express": { 105 | "version": "4.17.1", 106 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", 107 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", 108 | "requires": { 109 | "accepts": "~1.3.7", 110 | "array-flatten": "1.1.1", 111 | "body-parser": "1.19.0", 112 | "content-disposition": "0.5.3", 113 | "content-type": "~1.0.4", 114 | "cookie": "0.4.0", 115 | "cookie-signature": "1.0.6", 116 | "debug": "2.6.9", 117 | "depd": "~1.1.2", 118 | "encodeurl": "~1.0.2", 119 | "escape-html": "~1.0.3", 120 | "etag": "~1.8.1", 121 | "finalhandler": "~1.1.2", 122 | "fresh": "0.5.2", 123 | "merge-descriptors": "1.0.1", 124 | "methods": "~1.1.2", 125 | "on-finished": "~2.3.0", 126 | "parseurl": "~1.3.3", 127 | "path-to-regexp": "0.1.7", 128 | "proxy-addr": "~2.0.5", 129 | "qs": "6.7.0", 130 | "range-parser": "~1.2.1", 131 | "safe-buffer": "5.1.2", 132 | "send": "0.17.1", 133 | "serve-static": "1.14.1", 134 | "setprototypeof": "1.1.1", 135 | "statuses": "~1.5.0", 136 | "type-is": "~1.6.18", 137 | "utils-merge": "1.0.1", 138 | "vary": "~1.1.2" 139 | } 140 | }, 141 | "finalhandler": { 142 | "version": "1.1.2", 143 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 144 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 145 | "requires": { 146 | "debug": "2.6.9", 147 | "encodeurl": "~1.0.2", 148 | "escape-html": "~1.0.3", 149 | "on-finished": "~2.3.0", 150 | "parseurl": "~1.3.3", 151 | "statuses": "~1.5.0", 152 | "unpipe": "~1.0.0" 153 | } 154 | }, 155 | "forwarded": { 156 | "version": "0.1.2", 157 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 158 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 159 | }, 160 | "fresh": { 161 | "version": "0.5.2", 162 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 163 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 164 | }, 165 | "http-errors": { 166 | "version": "1.7.2", 167 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", 168 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", 169 | "requires": { 170 | "depd": "~1.1.2", 171 | "inherits": "2.0.3", 172 | "setprototypeof": "1.1.1", 173 | "statuses": ">= 1.5.0 < 2", 174 | "toidentifier": "1.0.0" 175 | } 176 | }, 177 | "iconv-lite": { 178 | "version": "0.4.24", 179 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 180 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 181 | "requires": { 182 | "safer-buffer": ">= 2.1.2 < 3" 183 | } 184 | }, 185 | "inherits": { 186 | "version": "2.0.3", 187 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 188 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 189 | }, 190 | "ipaddr.js": { 191 | "version": "1.9.1", 192 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 193 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 194 | }, 195 | "media-typer": { 196 | "version": "0.3.0", 197 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 198 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 199 | }, 200 | "merge-descriptors": { 201 | "version": "1.0.1", 202 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 203 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 204 | }, 205 | "methods": { 206 | "version": "1.1.2", 207 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 208 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 209 | }, 210 | "mime": { 211 | "version": "1.6.0", 212 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 213 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 214 | }, 215 | "mime-db": { 216 | "version": "1.44.0", 217 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 218 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" 219 | }, 220 | "mime-types": { 221 | "version": "2.1.27", 222 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 223 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 224 | "requires": { 225 | "mime-db": "1.44.0" 226 | } 227 | }, 228 | "ms": { 229 | "version": "2.0.0", 230 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 231 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 232 | }, 233 | "negotiator": { 234 | "version": "0.6.2", 235 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", 236 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" 237 | }, 238 | "on-finished": { 239 | "version": "2.3.0", 240 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 241 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 242 | "requires": { 243 | "ee-first": "1.1.1" 244 | } 245 | }, 246 | "parseurl": { 247 | "version": "1.3.3", 248 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 249 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 250 | }, 251 | "path-to-regexp": { 252 | "version": "0.1.7", 253 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 254 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 255 | }, 256 | "proxy-addr": { 257 | "version": "2.0.6", 258 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", 259 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", 260 | "requires": { 261 | "forwarded": "~0.1.2", 262 | "ipaddr.js": "1.9.1" 263 | } 264 | }, 265 | "qs": { 266 | "version": "6.7.0", 267 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", 268 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" 269 | }, 270 | "range-parser": { 271 | "version": "1.2.1", 272 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 273 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 274 | }, 275 | "raw-body": { 276 | "version": "2.4.0", 277 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", 278 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", 279 | "requires": { 280 | "bytes": "3.1.0", 281 | "http-errors": "1.7.2", 282 | "iconv-lite": "0.4.24", 283 | "unpipe": "1.0.0" 284 | } 285 | }, 286 | "safe-buffer": { 287 | "version": "5.1.2", 288 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 289 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 290 | }, 291 | "safer-buffer": { 292 | "version": "2.1.2", 293 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 294 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 295 | }, 296 | "send": { 297 | "version": "0.17.1", 298 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", 299 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", 300 | "requires": { 301 | "debug": "2.6.9", 302 | "depd": "~1.1.2", 303 | "destroy": "~1.0.4", 304 | "encodeurl": "~1.0.2", 305 | "escape-html": "~1.0.3", 306 | "etag": "~1.8.1", 307 | "fresh": "0.5.2", 308 | "http-errors": "~1.7.2", 309 | "mime": "1.6.0", 310 | "ms": "2.1.1", 311 | "on-finished": "~2.3.0", 312 | "range-parser": "~1.2.1", 313 | "statuses": "~1.5.0" 314 | }, 315 | "dependencies": { 316 | "ms": { 317 | "version": "2.1.1", 318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 319 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" 320 | } 321 | } 322 | }, 323 | "serve-static": { 324 | "version": "1.14.1", 325 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", 326 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", 327 | "requires": { 328 | "encodeurl": "~1.0.2", 329 | "escape-html": "~1.0.3", 330 | "parseurl": "~1.3.3", 331 | "send": "0.17.1" 332 | } 333 | }, 334 | "setprototypeof": { 335 | "version": "1.1.1", 336 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", 337 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" 338 | }, 339 | "statuses": { 340 | "version": "1.5.0", 341 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 342 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 343 | }, 344 | "toidentifier": { 345 | "version": "1.0.0", 346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", 347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" 348 | }, 349 | "type-is": { 350 | "version": "1.6.18", 351 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 352 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 353 | "requires": { 354 | "media-typer": "0.3.0", 355 | "mime-types": "~2.1.24" 356 | } 357 | }, 358 | "unpipe": { 359 | "version": "1.0.0", 360 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 361 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 362 | }, 363 | "utils-merge": { 364 | "version": "1.0.1", 365 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 366 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 367 | }, 368 | "vary": { 369 | "version": "1.1.2", 370 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 371 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 372 | } 373 | } 374 | } 375 | -------------------------------------------------------------------------------- /smoke/testdata/nodejs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "Paketo Buildpacks", 3 | "dependencies": { 4 | "express": "^4.17.0" 5 | }, 6 | "description": "Sample Node.js Application using NPM", 7 | "license": "Apache-2.0", 8 | "name": "sample", 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/paketo-buildpacks/samples" 12 | }, 13 | "scripts": { 14 | "start": "echo \"start\" && node server.js" 15 | }, 16 | "version": "0.0.0" 17 | } 18 | -------------------------------------------------------------------------------- /smoke/testdata/nodejs/server.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const port = process.env.PORT || 8080; 3 | 4 | const app = express(); 5 | 6 | app.get('/', (request, response) => { 7 | response.send(` 8 | 9 | 10 | Powered By Paketo Buildpacks 11 | 12 | 13 | 14 | 15 | `); 16 | }); 17 | 18 | app.listen(port); 19 | -------------------------------------------------------------------------------- /smoke/testdata/php/README.md: -------------------------------------------------------------------------------- 1 | # PHP Sample App using Built-in Webserver 2 | 3 | ## Building 4 | 5 | `pack build php-webserver-sample --env BP_PHP_WEB_DIR=htdocs --buildpack gcr.io/paketo-buildpacks/php` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --env PORT=8080 --publish 8080:8080 php-webserver-sample` 10 | 11 | ## Viewing 12 | 13 | `curl http://localhost:8080` 14 | -------------------------------------------------------------------------------- /smoke/testdata/php/htdocs/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Powered By Paketo Buildpacks 5 | 6 | 7 | '; 9 | ?> 10 | 11 | 12 | -------------------------------------------------------------------------------- /smoke/testdata/procfile/Procfile: -------------------------------------------------------------------------------- 1 | web: FOLDER=web ./static-file-server-1.8.0-linux-amd64 2 | -------------------------------------------------------------------------------- /smoke/testdata/procfile/README.md: -------------------------------------------------------------------------------- 1 | # Procfile Static Webserver Sample Application 2 | 3 | ## Building 4 | 5 | ```bash 6 | pack build applications/procfile 7 | ``` 8 | 9 | ## Running 10 | 11 | ```bash 12 | docker run --tty --publish 8080:8080 applications/procfile 13 | ``` 14 | 15 | ## Viewing 16 | 17 | ```bash 18 | curl -s http://localhost:8080/hello-world.txt 19 | ``` 20 | -------------------------------------------------------------------------------- /smoke/testdata/procfile/static-file-server-1.8.0-linux-amd64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/paketo-buildpacks/full-builder/0e20e4efb4fca4aff2177eaf2920790bc0f14c29/smoke/testdata/procfile/static-file-server-1.8.0-linux-amd64 -------------------------------------------------------------------------------- /smoke/testdata/procfile/web/hello-world.txt: -------------------------------------------------------------------------------- 1 | Hello World! -------------------------------------------------------------------------------- /smoke/testdata/python/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | venv -------------------------------------------------------------------------------- /smoke/testdata/python/Pipfile: -------------------------------------------------------------------------------- 1 | [packages] 2 | Flask = "==2.1.3" 3 | gunicorn = "*" 4 | itsdangerous = "==2.1.2" 5 | 6 | [dev-packages] 7 | tox = "*" 8 | coverage = "*" 9 | "flake8" = "*" 10 | flask-testing = "*" 11 | -------------------------------------------------------------------------------- /smoke/testdata/python/Pipfile.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_meta": { 3 | "hash": { 4 | "sha256": "0097800581d075b74af129559abd752817e4cc66b23df5082a3d0795f41b10a4" 5 | }, 6 | "pipfile-spec": 6, 7 | "requires": {}, 8 | "sources": [ 9 | { 10 | "name": "pypi", 11 | "url": "https://pypi.org/simple", 12 | "verify_ssl": true 13 | } 14 | ] 15 | }, 16 | "default": { 17 | "click": { 18 | "hashes": [ 19 | "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", 20 | "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" 21 | ], 22 | "markers": "python_version >= '3.7'", 23 | "version": "==8.1.3" 24 | }, 25 | "flask": { 26 | "hashes": [ 27 | "sha256:15972e5017df0575c3d6c090ba168b6db90259e620ac8d7ea813a396bad5b6cb", 28 | "sha256:9013281a7402ad527f8fd56375164f3aa021ecfaff89bfe3825346c24f87e04c" 29 | ], 30 | "index": "pypi", 31 | "version": "==2.1.3" 32 | }, 33 | "gunicorn": { 34 | "hashes": [ 35 | "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", 36 | "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" 37 | ], 38 | "index": "pypi", 39 | "version": "==20.1.0" 40 | }, 41 | "itsdangerous": { 42 | "hashes": [ 43 | "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", 44 | "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" 45 | ], 46 | "index": "pypi", 47 | "version": "==2.1.2" 48 | }, 49 | "jinja2": { 50 | "hashes": [ 51 | "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", 52 | "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" 53 | ], 54 | "markers": "python_version >= '3.7'", 55 | "version": "==3.1.2" 56 | }, 57 | "markupsafe": { 58 | "hashes": [ 59 | "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", 60 | "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", 61 | "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", 62 | "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", 63 | "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", 64 | "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", 65 | "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", 66 | "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", 67 | "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", 68 | "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", 69 | "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", 70 | "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", 71 | "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", 72 | "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", 73 | "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", 74 | "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", 75 | "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", 76 | "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", 77 | "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", 78 | "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", 79 | "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", 80 | "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", 81 | "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", 82 | "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", 83 | "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", 84 | "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", 85 | "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", 86 | "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", 87 | "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", 88 | "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", 89 | "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", 90 | "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", 91 | "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", 92 | "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", 93 | "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", 94 | "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", 95 | "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", 96 | "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", 97 | "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", 98 | "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" 99 | ], 100 | "markers": "python_version >= '3.7'", 101 | "version": "==2.1.1" 102 | }, 103 | "setuptools": { 104 | "hashes": [ 105 | "sha256:512e5536220e38146176efb833d4a62aa726b7bbff82cfbc8ba9eaa3996e0b17", 106 | "sha256:f62ea9da9ed6289bfe868cd6845968a2c854d1427f8548d52cae02a42b4f0356" 107 | ], 108 | "markers": "python_version >= '3.7'", 109 | "version": "==65.5.0" 110 | }, 111 | "werkzeug": { 112 | "hashes": [ 113 | "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f", 114 | "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5" 115 | ], 116 | "markers": "python_version >= '3.7'", 117 | "version": "==2.2.2" 118 | } 119 | }, 120 | "develop": { 121 | "click": { 122 | "hashes": [ 123 | "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", 124 | "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" 125 | ], 126 | "markers": "python_version >= '3.7'", 127 | "version": "==8.1.3" 128 | }, 129 | "coverage": { 130 | "hashes": [ 131 | "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", 132 | "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", 133 | "sha256:12adf310e4aafddc58afdb04d686795f33f4d7a6fa67a7a9d4ce7d6ae24d949f", 134 | "sha256:1431986dac3923c5945271f169f59c45b8802a114c8f548d611f2015133df77a", 135 | "sha256:1ef221513e6f68b69ee9e159506d583d31aa3567e0ae84eaad9d6ec1107dddaa", 136 | "sha256:20c8ac5386253717e5ccc827caad43ed66fea0efe255727b1053a8154d952398", 137 | "sha256:2198ea6fc548de52adc826f62cb18554caedfb1d26548c1b7c88d8f7faa8f6ba", 138 | "sha256:255758a1e3b61db372ec2736c8e2a1fdfaf563977eedbdf131de003ca5779b7d", 139 | "sha256:265de0fa6778d07de30bcf4d9dc471c3dc4314a23a3c6603d356a3c9abc2dfcf", 140 | "sha256:33a7da4376d5977fbf0a8ed91c4dffaaa8dbf0ddbf4c8eea500a2486d8bc4d7b", 141 | "sha256:42eafe6778551cf006a7c43153af1211c3aaab658d4d66fa5fcc021613d02518", 142 | "sha256:4433b90fae13f86fafff0b326453dd42fc9a639a0d9e4eec4d366436d1a41b6d", 143 | "sha256:4a5375e28c5191ac38cca59b38edd33ef4cc914732c916f2929029b4bfb50795", 144 | "sha256:4a8dbc1f0fbb2ae3de73eb0bdbb914180c7abfbf258e90b311dcd4f585d44bd2", 145 | "sha256:59f53f1dc5b656cafb1badd0feb428c1e7bc19b867479ff72f7a9dd9b479f10e", 146 | "sha256:5dbec3b9095749390c09ab7c89d314727f18800060d8d24e87f01fb9cfb40b32", 147 | "sha256:633713d70ad6bfc49b34ead4060531658dc6dfc9b3eb7d8a716d5873377ab745", 148 | "sha256:6b07130585d54fe8dff3d97b93b0e20290de974dc8177c320aeaf23459219c0b", 149 | "sha256:6c4459b3de97b75e3bd6b7d4b7f0db13f17f504f3d13e2a7c623786289dd670e", 150 | "sha256:6d4817234349a80dbf03640cec6109cd90cba068330703fa65ddf56b60223a6d", 151 | "sha256:723e8130d4ecc8f56e9a611e73b31219595baa3bb252d539206f7bbbab6ffc1f", 152 | "sha256:784f53ebc9f3fd0e2a3f6a78b2be1bd1f5575d7863e10c6e12504f240fd06660", 153 | "sha256:7b6be138d61e458e18d8e6ddcddd36dd96215edfe5f1168de0b1b32635839b62", 154 | "sha256:7ccf362abd726b0410bf8911c31fbf97f09f8f1061f8c1cf03dfc4b6372848f6", 155 | "sha256:83516205e254a0cb77d2d7bb3632ee019d93d9f4005de31dca0a8c3667d5bc04", 156 | "sha256:851cf4ff24062c6aec510a454b2584f6e998cada52d4cb58c5e233d07172e50c", 157 | "sha256:8f830ed581b45b82451a40faabb89c84e1a998124ee4212d440e9c6cf70083e5", 158 | "sha256:94e2565443291bd778421856bc975d351738963071e9b8839ca1fc08b42d4bef", 159 | "sha256:95203854f974e07af96358c0b261f1048d8e1083f2de9b1c565e1be4a3a48cfc", 160 | "sha256:97117225cdd992a9c2a5515db1f66b59db634f59d0679ca1fa3fe8da32749cae", 161 | "sha256:98e8a10b7a314f454d9eff4216a9a94d143a7ee65018dd12442e898ee2310578", 162 | "sha256:a1170fa54185845505fbfa672f1c1ab175446c887cce8212c44149581cf2d466", 163 | "sha256:a6b7d95969b8845250586f269e81e5dfdd8ff828ddeb8567a4a2eaa7313460c4", 164 | "sha256:a8fb6cf131ac4070c9c5a3e21de0f7dc5a0fbe8bc77c9456ced896c12fcdad91", 165 | "sha256:af4fffaffc4067232253715065e30c5a7ec6faac36f8fc8d6f64263b15f74db0", 166 | "sha256:b4a5be1748d538a710f87542f22c2cad22f80545a847ad91ce45e77417293eb4", 167 | "sha256:b5604380f3415ba69de87a289a2b56687faa4fe04dbee0754bfcae433489316b", 168 | "sha256:b9023e237f4c02ff739581ef35969c3739445fb059b060ca51771e69101efffe", 169 | "sha256:bc8ef5e043a2af066fa8cbfc6e708d58017024dc4345a1f9757b329a249f041b", 170 | "sha256:c4ed2820d919351f4167e52425e096af41bfabacb1857186c1ea32ff9983ed75", 171 | "sha256:cca4435eebea7962a52bdb216dec27215d0df64cf27fc1dd538415f5d2b9da6b", 172 | "sha256:d900bb429fdfd7f511f868cedd03a6bbb142f3f9118c09b99ef8dc9bf9643c3c", 173 | "sha256:d9ecf0829c6a62b9b573c7bb6d4dcd6ba8b6f80be9ba4fc7ed50bf4ac9aecd72", 174 | "sha256:dbdb91cd8c048c2b09eb17713b0c12a54fbd587d79adcebad543bc0cd9a3410b", 175 | "sha256:de3001a203182842a4630e7b8d1a2c7c07ec1b45d3084a83d5d227a3806f530f", 176 | "sha256:e07f4a4a9b41583d6eabec04f8b68076ab3cd44c20bd29332c6572dda36f372e", 177 | "sha256:ef8674b0ee8cc11e2d574e3e2998aea5df5ab242e012286824ea3c6970580e53", 178 | "sha256:f4f05d88d9a80ad3cac6244d36dd89a3c00abc16371769f1340101d3cb899fc3", 179 | "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84", 180 | "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" 181 | ], 182 | "index": "pypi", 183 | "version": "==6.5.0" 184 | }, 185 | "distlib": { 186 | "hashes": [ 187 | "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", 188 | "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e" 189 | ], 190 | "version": "==0.3.6" 191 | }, 192 | "filelock": { 193 | "hashes": [ 194 | "sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc", 195 | "sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4" 196 | ], 197 | "markers": "python_version >= '3.7'", 198 | "version": "==3.8.0" 199 | }, 200 | "flake8": { 201 | "hashes": [ 202 | "sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db", 203 | "sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248" 204 | ], 205 | "index": "pypi", 206 | "version": "==5.0.4" 207 | }, 208 | "flask": { 209 | "hashes": [ 210 | "sha256:15972e5017df0575c3d6c090ba168b6db90259e620ac8d7ea813a396bad5b6cb", 211 | "sha256:9013281a7402ad527f8fd56375164f3aa021ecfaff89bfe3825346c24f87e04c" 212 | ], 213 | "index": "pypi", 214 | "version": "==2.1.3" 215 | }, 216 | "flask-testing": { 217 | "hashes": [ 218 | "sha256:0a734d7b68e63a9410b413cd7b1f96456f9a858bd09a6222d465650cc782eb01" 219 | ], 220 | "index": "pypi", 221 | "version": "==0.8.1" 222 | }, 223 | "itsdangerous": { 224 | "hashes": [ 225 | "sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44", 226 | "sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a" 227 | ], 228 | "index": "pypi", 229 | "version": "==2.1.2" 230 | }, 231 | "jinja2": { 232 | "hashes": [ 233 | "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", 234 | "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" 235 | ], 236 | "markers": "python_version >= '3.7'", 237 | "version": "==3.1.2" 238 | }, 239 | "markupsafe": { 240 | "hashes": [ 241 | "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", 242 | "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", 243 | "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", 244 | "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", 245 | "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", 246 | "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", 247 | "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", 248 | "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", 249 | "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", 250 | "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", 251 | "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", 252 | "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", 253 | "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", 254 | "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", 255 | "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", 256 | "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", 257 | "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", 258 | "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", 259 | "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", 260 | "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", 261 | "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", 262 | "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", 263 | "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", 264 | "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", 265 | "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", 266 | "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", 267 | "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", 268 | "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", 269 | "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", 270 | "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", 271 | "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", 272 | "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", 273 | "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", 274 | "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", 275 | "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", 276 | "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", 277 | "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", 278 | "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", 279 | "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", 280 | "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" 281 | ], 282 | "markers": "python_version >= '3.7'", 283 | "version": "==2.1.1" 284 | }, 285 | "mccabe": { 286 | "hashes": [ 287 | "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", 288 | "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" 289 | ], 290 | "markers": "python_version >= '3.6'", 291 | "version": "==0.7.0" 292 | }, 293 | "packaging": { 294 | "hashes": [ 295 | "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", 296 | "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" 297 | ], 298 | "markers": "python_version >= '3.6'", 299 | "version": "==21.3" 300 | }, 301 | "platformdirs": { 302 | "hashes": [ 303 | "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788", 304 | "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19" 305 | ], 306 | "markers": "python_version >= '3.7'", 307 | "version": "==2.5.2" 308 | }, 309 | "pluggy": { 310 | "hashes": [ 311 | "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", 312 | "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" 313 | ], 314 | "markers": "python_version >= '3.6'", 315 | "version": "==1.0.0" 316 | }, 317 | "py": { 318 | "hashes": [ 319 | "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", 320 | "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" 321 | ], 322 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", 323 | "version": "==1.11.0" 324 | }, 325 | "pycodestyle": { 326 | "hashes": [ 327 | "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785", 328 | "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b" 329 | ], 330 | "markers": "python_version >= '3.6'", 331 | "version": "==2.9.1" 332 | }, 333 | "pyflakes": { 334 | "hashes": [ 335 | "sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2", 336 | "sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3" 337 | ], 338 | "markers": "python_version >= '3.6'", 339 | "version": "==2.5.0" 340 | }, 341 | "pyparsing": { 342 | "hashes": [ 343 | "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb", 344 | "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc" 345 | ], 346 | "markers": "python_full_version >= '3.6.8'", 347 | "version": "==3.0.9" 348 | }, 349 | "six": { 350 | "hashes": [ 351 | "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", 352 | "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" 353 | ], 354 | "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2'", 355 | "version": "==1.16.0" 356 | }, 357 | "tomli": { 358 | "hashes": [ 359 | "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", 360 | "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" 361 | ], 362 | "markers": "python_version >= '3.7' and python_version < '3.11'", 363 | "version": "==2.0.1" 364 | }, 365 | "tox": { 366 | "hashes": [ 367 | "sha256:44f3c347c68c2c68799d7d44f1808f9d396fc8a1a500cbc624253375c7ae107e", 368 | "sha256:bf037662d7c740d15c9924ba23bb3e587df20598697bb985ac2b49bdc2d847f6" 369 | ], 370 | "index": "pypi", 371 | "version": "==3.26.0" 372 | }, 373 | "virtualenv": { 374 | "hashes": [ 375 | "sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da", 376 | "sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27" 377 | ], 378 | "markers": "python_version >= '3.6'", 379 | "version": "==20.16.5" 380 | }, 381 | "werkzeug": { 382 | "hashes": [ 383 | "sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f", 384 | "sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5" 385 | ], 386 | "markers": "python_version >= '3.7'", 387 | "version": "==2.2.2" 388 | } 389 | } 390 | } 391 | -------------------------------------------------------------------------------- /smoke/testdata/python/Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn server:app 2 | -------------------------------------------------------------------------------- /smoke/testdata/python/README.md: -------------------------------------------------------------------------------- 1 | # Python sample app using pipenv package manager 2 | 3 | ## Building 4 | 5 | `pack build pipenv-sample --buildpack gcr.io/paketo-buildpacks/python` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --env PORT=8080 --publish 8080:8080 pipenv-sample` 10 | 11 | ## Viewing 12 | 13 | `curl http://localhost:8080` 14 | -------------------------------------------------------------------------------- /smoke/testdata/python/server.py: -------------------------------------------------------------------------------- 1 | from flask import Flask, request, render_template 2 | import subprocess 3 | import gunicorn 4 | 5 | 6 | app = Flask(__name__) 7 | 8 | @app.route("/") 9 | def hello(): 10 | return render_template('index.html') 11 | 12 | @app.route('/execute', methods=['POST']) 13 | def execute(): 14 | with open('runtime.py', 'w') as f: 15 | f.write(request.values.get('code')) 16 | return subprocess.check_output(["python", "runtime.py"]) 17 | 18 | @app.route('/versions') 19 | def versions(): 20 | version = gunicorn.__version__ 21 | return "Gunicorn version: " + version 22 | 23 | app.debug=True 24 | -------------------------------------------------------------------------------- /smoke/testdata/python/templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Powered By Paketo Buildpacks 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /smoke/testdata/ruby/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | ruby '~> 3.0' 4 | 5 | gem 'puma' 6 | gem 'sinatra' 7 | -------------------------------------------------------------------------------- /smoke/testdata/ruby/README.md: -------------------------------------------------------------------------------- 1 | # Ruby sample app using Puma web server 2 | 3 | ## Building 4 | 5 | `pack build puma-sample --buildpack gcr.io/paketo-buildpacks/ruby` 6 | 7 | ## Running 8 | 9 | `docker run --interactive --tty --publish 9292:9292 puma-sample` 10 | 11 | `9292` is the default port for rack compliant web servers. As of date, the puma 12 | buildpack requires that the app source have a `config.ru` file. 13 | 14 | ## Viewing 15 | 16 | `curl http://localhost:9292` 17 | -------------------------------------------------------------------------------- /smoke/testdata/ruby/app.rb: -------------------------------------------------------------------------------- 1 | require 'sinatra' 2 | configure { set :server, :puma } 3 | 4 | get '/' do 5 | ' 6 | 7 | 8 | Powered By Paketo Buildpacks 9 | 10 | 11 | 12 | 13 | ' 14 | end 15 | -------------------------------------------------------------------------------- /smoke/testdata/ruby/config.ru: -------------------------------------------------------------------------------- 1 | #\ -s puma 2 | require './app' 3 | run Sinatra::Application 4 | -------------------------------------------------------------------------------- /smoke/web_servers_test.go: -------------------------------------------------------------------------------- 1 | package smoke_test 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "path/filepath" 7 | "testing" 8 | 9 | "github.com/paketo-buildpacks/occam" 10 | "github.com/sclevine/spec" 11 | 12 | . "github.com/onsi/gomega" 13 | . "github.com/paketo-buildpacks/occam/matchers" 14 | ) 15 | 16 | func testWebServers(t *testing.T, context spec.G, it spec.S) { 17 | var ( 18 | Expect = NewWithT(t).Expect 19 | Eventually = NewWithT(t).Eventually 20 | 21 | pack occam.Pack 22 | docker occam.Docker 23 | ) 24 | 25 | it.Before(func() { 26 | pack = occam.NewPack().WithVerbose().WithNoColor() 27 | docker = occam.NewDocker() 28 | }) 29 | 30 | context("detects a HTTPD app", func() { 31 | var ( 32 | image occam.Image 33 | container occam.Container 34 | 35 | name string 36 | source string 37 | ) 38 | 39 | it.Before(func() { 40 | var err error 41 | name, err = occam.RandomName() 42 | Expect(err).NotTo(HaveOccurred()) 43 | }) 44 | 45 | it.After(func() { 46 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 47 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 48 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 49 | Expect(os.RemoveAll(source)).To(Succeed()) 50 | }) 51 | 52 | it("builds successfully", func() { 53 | var err error 54 | source, err = occam.Source(filepath.Join("testdata", "httpd")) 55 | Expect(err).NotTo(HaveOccurred()) 56 | 57 | var logs fmt.Stringer 58 | image, logs, err = pack.Build. 59 | WithPullPolicy("never"). 60 | WithBuilder(Builder). 61 | Execute(name, source) 62 | Expect(err).ToNot(HaveOccurred(), logs.String) 63 | 64 | container, err = docker.Container.Run. 65 | WithEnv(map[string]string{"PORT": "8080"}). 66 | WithPublish("8080"). 67 | Execute(image.ID) 68 | Expect(err).NotTo(HaveOccurred()) 69 | 70 | Eventually(container).Should(BeAvailable()) 71 | 72 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Apache HTTP Server"))) 73 | }) 74 | }) 75 | 76 | context("detects a NGINX app", func() { 77 | var ( 78 | image occam.Image 79 | container occam.Container 80 | 81 | name string 82 | source string 83 | ) 84 | 85 | it.Before(func() { 86 | var err error 87 | name, err = occam.RandomName() 88 | Expect(err).NotTo(HaveOccurred()) 89 | }) 90 | 91 | it.After(func() { 92 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 93 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 94 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 95 | Expect(os.RemoveAll(source)).To(Succeed()) 96 | }) 97 | 98 | it("builds successfully", func() { 99 | var err error 100 | source, err = occam.Source(filepath.Join("testdata", "nginx")) 101 | Expect(err).NotTo(HaveOccurred()) 102 | 103 | var logs fmt.Stringer 104 | image, logs, err = pack.Build. 105 | WithPullPolicy("never"). 106 | WithBuilder(Builder). 107 | Execute(name, source) 108 | Expect(err).ToNot(HaveOccurred(), logs.String) 109 | 110 | container, err = docker.Container.Run. 111 | WithEnv(map[string]string{"PORT": "8080"}). 112 | WithPublish("8080"). 113 | Execute(image.ID) 114 | Expect(err).NotTo(HaveOccurred()) 115 | 116 | Eventually(container).Should(BeAvailable()) 117 | 118 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Nginx Server"))) 119 | }) 120 | }) 121 | 122 | context("detects a JavaScript frontend app", func() { 123 | var ( 124 | image occam.Image 125 | container occam.Container 126 | 127 | name string 128 | source string 129 | ) 130 | 131 | it.Before(func() { 132 | var err error 133 | name, err = occam.RandomName() 134 | Expect(err).NotTo(HaveOccurred()) 135 | }) 136 | 137 | it.After(func() { 138 | Expect(docker.Container.Remove.Execute(container.ID)).To(Succeed()) 139 | Expect(docker.Volume.Remove.Execute(occam.CacheVolumeNames(name))).To(Succeed()) 140 | Expect(docker.Image.Remove.Execute(image.ID)).To(Succeed()) 141 | Expect(os.RemoveAll(source)).To(Succeed()) 142 | }) 143 | 144 | context("app uses react and httpd", func() { 145 | it("builds successfully", func() { 146 | var err error 147 | source, err = occam.Source(filepath.Join("testdata", "javascript-frontend")) 148 | Expect(err).NotTo(HaveOccurred()) 149 | 150 | var logs fmt.Stringer 151 | image, logs, err = pack.Build. 152 | WithPullPolicy("never"). 153 | WithBuilder(Builder). 154 | WithEnv(map[string]string{ 155 | "BP_NODE_RUN_SCRIPTS": "build", 156 | "BP_WEB_SERVER": "httpd", 157 | "BP_WEB_SERVER_ROOT": "build", 158 | "BP_WEB_SERVER_ENABLE_PUSH_STATE": "true", 159 | }). 160 | Execute(name, source) 161 | Expect(err).ToNot(HaveOccurred(), logs.String) 162 | 163 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Node Engine"))) 164 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for NPM Install"))) 165 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Node Run Script"))) 166 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Apache HTTP Server"))) 167 | 168 | container, err = docker.Container.Run. 169 | WithEnv(map[string]string{"PORT": "8080"}). 170 | WithPublish("8080"). 171 | Execute(image.ID) 172 | Expect(err).NotTo(HaveOccurred()) 173 | 174 | Eventually(container).Should(Serve(ContainSubstring("Paketo Buildpacks")).OnPort(8080)) 175 | }) 176 | }) 177 | 178 | context("app uses react and nginx", func() { 179 | it("builds successfully", func() { 180 | var err error 181 | source, err = occam.Source(filepath.Join("testdata", "javascript-frontend")) 182 | Expect(err).NotTo(HaveOccurred()) 183 | 184 | var logs fmt.Stringer 185 | image, logs, err = pack.Build. 186 | WithPullPolicy("never"). 187 | WithBuilder(Builder). 188 | WithEnv(map[string]string{ 189 | "BP_NODE_RUN_SCRIPTS": "build", 190 | "BP_WEB_SERVER": "nginx", 191 | "BP_WEB_SERVER_ROOT": "build", 192 | "BP_WEB_SERVER_ENABLE_PUSH_STATE": "true", 193 | }). 194 | Execute(name, source) 195 | Expect(err).ToNot(HaveOccurred(), logs.String) 196 | 197 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Node Engine"))) 198 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for NPM Install"))) 199 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Node Run Script"))) 200 | Expect(logs).To(ContainLines(ContainSubstring("Paketo Buildpack for Nginx Server"))) 201 | 202 | container, err = docker.Container.Run. 203 | WithEnv(map[string]string{"PORT": "8080"}). 204 | WithPublish("8080"). 205 | Execute(image.ID) 206 | Expect(err).NotTo(HaveOccurred()) 207 | 208 | Eventually(container).Should(Serve(ContainSubstring("Paketo Buildpacks")).OnPort(8080)) 209 | }) 210 | }) 211 | }) 212 | } 213 | --------------------------------------------------------------------------------