├── stable
└── .keep
├── experimental
├── .keep
├── nodejs-functions
│ ├── templates
│ │ └── simple
│ │ │ ├── test
│ │ │ └── test.js
│ │ │ ├── function.js
│ │ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ │ │ └── package.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ └── package.json
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── go-modules
│ ├── templates
│ │ └── default
│ │ │ ├── go.mod
│ │ │ └── app.go
│ ├── image
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── rust-tide
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── server
│ │ │ │ └── bin
│ │ │ │ │ ├── .gitignore
│ │ │ │ │ ├── Dockerfile
│ │ │ │ │ ├── Cargo.toml
│ │ │ │ │ └── src
│ │ │ │ │ └── main.rs
│ │ │ ├── .dockerignore
│ │ │ ├── test-stack.sh
│ │ │ └── Dockerfile
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ ├── templates
│ │ └── default
│ │ │ ├── .gitignore
│ │ │ ├── src
│ │ │ └── lib.rs
│ │ │ ├── tests
│ │ │ └── test-lib.rs
│ │ │ ├── Cargo.toml
│ │ │ └── .vscode
│ │ │ └── launch.json
│ └── stack.yaml
├── vertx
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── Dockerfile
│ │ │ └── pom.xml
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── rust
│ ├── templates
│ │ └── simple
│ │ │ ├── src
│ │ │ └── main.rs
│ │ │ ├── Cargo.toml
│ │ │ ├── .gitignore
│ │ │ └── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── java-spring-boot2-liberty
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── .appsody-init.sh
│ │ │ ├── .appsody-init.bat
│ │ │ └── util
│ │ │ │ ├── RangeIncludesVersion.java
│ │ │ │ └── check_version
│ │ └── config
│ │ │ └── app-deploy.yaml
│ ├── templates
│ │ └── default
│ │ │ ├── src
│ │ │ └── main
│ │ │ │ ├── resources
│ │ │ │ ├── application.properties
│ │ │ │ └── public
│ │ │ │ │ └── index.html
│ │ │ │ ├── java
│ │ │ │ └── application
│ │ │ │ │ ├── Main.java
│ │ │ │ │ └── LivenessEndpoint.java
│ │ │ │ └── liberty
│ │ │ │ └── config
│ │ │ │ └── server.xml
│ │ │ ├── .vscode
│ │ │ └── launch.json
│ │ │ └── .gitignore
│ └── stack.yaml
└── rocket
│ ├── image
│ ├── project
│ │ ├── cargo-add
│ │ ├── .dockerignore
│ │ ├── deps
│ │ │ ├── Cargo.toml
│ │ │ └── src
│ │ │ │ ├── lib.rs
│ │ │ │ └── tests.rs
│ │ ├── .appsody-init.sh
│ │ └── Dockerfile
│ ├── .dockerignore
│ ├── config
│ │ └── app-deploy.yaml
│ └── Dockerfile-stack
│ ├── stack.yaml
│ └── templates
│ └── simple
│ ├── .gitignore
│ ├── src
│ ├── tests.rs
│ └── main.rs
│ ├── Cargo.toml
│ └── .vscode
│ └── tasks.json
├── incubator
├── python-flask
│ ├── image
│ │ ├── project
│ │ │ ├── test
│ │ │ │ ├── __init__.py
│ │ │ │ └── apptests.py
│ │ │ ├── server
│ │ │ │ ├── routes
│ │ │ │ │ ├── __init__.py
│ │ │ │ │ └── health.py
│ │ │ │ └── __init__.py
│ │ │ ├── .dockerignore
│ │ │ ├── Pipfile
│ │ │ ├── constraints.txt
│ │ │ └── Dockerfile
│ │ ├── .dockerignore
│ │ └── config
│ │ │ └── app-deploy.yaml
│ ├── templates
│ │ └── simple
│ │ │ ├── Pipfile
│ │ │ └── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ └── stack.yaml
├── node-red
│ ├── templates
│ │ └── simple
│ │ │ ├── flow_cred.json
│ │ │ ├── package-lock.json
│ │ │ └── package.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── package.json
│ │ │ └── Dockerfile
│ │ ├── Dockerfile-stack
│ │ └── config
│ │ │ └── app-deploy.yaml
│ └── stack.yaml
├── nodejs-express
│ ├── templates
│ │ ├── scaffold
│ │ │ ├── views
│ │ │ │ └── index.pug
│ │ │ ├── routes
│ │ │ │ └── index.js
│ │ │ ├── app.js
│ │ │ ├── .vscode
│ │ │ │ └── launch.json
│ │ │ ├── package.json
│ │ │ └── test
│ │ │ │ └── test.js
│ │ ├── kafka
│ │ │ ├── test
│ │ │ │ └── test.js
│ │ │ ├── .vscode
│ │ │ │ ├── launch.json
│ │ │ │ └── tasks.json
│ │ │ ├── package.json
│ │ │ └── docker-compose.yaml
│ │ └── simple
│ │ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ │ │ ├── app.js
│ │ │ ├── package.json
│ │ │ └── test
│ │ │ └── test.js
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── package.json
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── nodejs-loopback
│ ├── templates
│ │ └── scaffold
│ │ │ ├── .npmrc
│ │ │ ├── .prettierignore
│ │ │ ├── src
│ │ │ ├── controllers
│ │ │ │ ├── index.ts
│ │ │ │ └── README.md
│ │ │ ├── __tests__
│ │ │ │ ├── README.md
│ │ │ │ └── acceptance
│ │ │ │ │ ├── ping.controller.acceptance.ts
│ │ │ │ │ ├── test-helper.ts
│ │ │ │ │ └── home-page.acceptance.ts
│ │ │ ├── models
│ │ │ │ └── README.md
│ │ │ ├── datasources
│ │ │ │ └── README.md
│ │ │ ├── repositories
│ │ │ │ └── README.md
│ │ │ ├── sequence.ts
│ │ │ ├── index.ts
│ │ │ ├── migrate.ts
│ │ │ └── openapi-spec.ts
│ │ │ ├── .eslintignore
│ │ │ ├── .yo-rc.json
│ │ │ ├── .eslintrc.js
│ │ │ ├── .mocharc.json
│ │ │ ├── .prettierrc
│ │ │ ├── tsconfig.json
│ │ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ ├── tasks.json
│ │ │ └── settings.json
│ │ │ └── .gitignore
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── .mocharc.json
│ │ │ ├── tsconfig.json
│ │ │ ├── src
│ │ │ │ └── __tests__
│ │ │ │ │ └── acceptance
│ │ │ │ │ ├── ping.controller.acceptance.ts
│ │ │ │ │ ├── test-helper.ts
│ │ │ │ │ └── home-page.acceptance.ts
│ │ │ └── Dockerfile
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── starter
│ ├── templates
│ │ └── simple
│ │ │ ├── hello.sh
│ │ │ ├── tests
│ │ │ └── test.sh
│ │ │ └── .vscode
│ │ │ └── tasks.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ └── config
│ │ │ └── app-deploy.yaml
│ └── stack.yaml
├── nodejs
│ ├── templates
│ │ └── simple
│ │ │ ├── app.js
│ │ │ ├── package-lock.json
│ │ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ │ │ └── package.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── package.json
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ └── stack.yaml
├── kitura
│ ├── image
│ │ ├── project
│ │ │ ├── deps
│ │ │ │ └── AppsodyKitura
│ │ │ │ │ ├── Sources
│ │ │ │ │ └── AppsodyKitura
│ │ │ │ │ │ ├── Routes
│ │ │ │ │ │ ├── .keep
│ │ │ │ │ │ └── HealthRoutes.swift
│ │ │ │ │ │ ├── Logging.swift
│ │ │ │ │ │ └── Metrics.swift
│ │ │ │ │ ├── Tests
│ │ │ │ │ └── LinuxMain.swift
│ │ │ │ │ └── Package.swift
│ │ │ ├── .dockerignore
│ │ │ ├── .appsody-init.sh
│ │ │ └── Dockerfile
│ │ ├── .dockerignore
│ │ └── config
│ │ │ └── app-deploy.yaml
│ ├── templates
│ │ └── default
│ │ │ ├── .gitignore
│ │ │ ├── Sources
│ │ │ ├── server
│ │ │ │ └── main.swift
│ │ │ └── Application
│ │ │ │ └── Application.swift
│ │ │ ├── Tests
│ │ │ └── LinuxMain.swift
│ │ │ ├── Package.swift
│ │ │ └── .vscode
│ │ │ └── launch.json
│ └── stack.yaml
├── swift
│ ├── templates
│ │ └── simple
│ │ │ ├── Sources
│ │ │ └── simple
│ │ │ │ └── main.swift
│ │ │ ├── .gitignore
│ │ │ ├── Tests
│ │ │ ├── LinuxMain.swift
│ │ │ └── simpleTests
│ │ │ │ └── XCTestManifests.swift
│ │ │ ├── Package.swift
│ │ │ └── .vscode
│ │ │ └── launch.json
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ └── Dockerfile
│ │ └── config
│ │ │ └── app-deploy.yaml
│ └── stack.yaml
├── quarkus
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── .appsody-init.sh
│ │ │ ├── .appsody-init.bat
│ │ │ └── Dockerfile
│ │ ├── config
│ │ │ └── app-deploy.yaml
│ │ └── Dockerfile-stack
│ ├── templates
│ │ ├── default
│ │ │ ├── src
│ │ │ │ ├── test
│ │ │ │ │ └── java
│ │ │ │ │ │ └── org
│ │ │ │ │ │ └── acme
│ │ │ │ │ │ └── quickstart
│ │ │ │ │ │ ├── NativeGreetingResourceIT.java
│ │ │ │ │ │ └── GreetingResourceTest.java
│ │ │ │ └── main
│ │ │ │ │ └── java
│ │ │ │ │ └── org
│ │ │ │ │ └── acme
│ │ │ │ │ └── quickstart
│ │ │ │ │ ├── GreetingService.java
│ │ │ │ │ └── GreetingResource.java
│ │ │ └── .vscode
│ │ │ │ ├── launch.json
│ │ │ │ └── tasks.json
│ │ └── kafka
│ │ │ ├── .vscode
│ │ │ ├── launch.json
│ │ │ └── tasks.json
│ │ │ ├── src
│ │ │ └── main
│ │ │ │ ├── resources
│ │ │ │ ├── application.properties
│ │ │ │ └── META-INF
│ │ │ │ │ └── resources
│ │ │ │ │ └── prices.html
│ │ │ │ └── java
│ │ │ │ └── org
│ │ │ │ └── acme
│ │ │ │ └── kafka
│ │ │ │ ├── PriceGenerator.java
│ │ │ │ ├── PriceResource.java
│ │ │ │ └── PriceConverter.java
│ │ │ └── docker-compose.yaml
│ └── stack.yaml
├── java-microprofile
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── .appsody-init.sh
│ │ │ ├── server-dev.xml
│ │ │ ├── .appsody-init.bat
│ │ │ ├── install-dev-deps.sh
│ │ │ └── util
│ │ │ │ ├── RangeIncludesVersion.java
│ │ │ │ └── check_version
│ │ └── config
│ │ │ └── app-deploy.yaml
│ ├── templates
│ │ └── default
│ │ │ ├── src
│ │ │ └── main
│ │ │ │ ├── liberty
│ │ │ │ └── config
│ │ │ │ │ ├── configDropins
│ │ │ │ │ └── defaults
│ │ │ │ │ │ └── quick-start-security.xml
│ │ │ │ │ └── server.xml
│ │ │ │ ├── java
│ │ │ │ └── dev
│ │ │ │ │ └── appsody
│ │ │ │ │ └── starter
│ │ │ │ │ ├── StarterApplication.java
│ │ │ │ │ └── health
│ │ │ │ │ ├── StarterLivenessCheck.java
│ │ │ │ │ └── StarterReadinessCheck.java
│ │ │ │ └── webapp
│ │ │ │ └── WEB-INF
│ │ │ │ └── beans.xml
│ │ │ ├── .vscode
│ │ │ └── launch.json
│ │ │ └── .gitignore
│ └── stack.yaml
├── java-openliberty
│ ├── image
│ │ ├── .dockerignore
│ │ ├── project
│ │ │ ├── .dockerignore
│ │ │ ├── .appsody-init.bat
│ │ │ ├── util
│ │ │ │ ├── RangeIncludesVersion.java
│ │ │ │ └── check_version
│ │ │ └── .appsody-init.sh
│ │ ├── mvn-stack-settings.xml
│ │ └── config
│ │ │ └── app-deploy.yaml
│ ├── templates
│ │ └── default
│ │ │ ├── src
│ │ │ └── main
│ │ │ │ ├── liberty
│ │ │ │ └── config
│ │ │ │ │ ├── configDropins
│ │ │ │ │ └── defaults
│ │ │ │ │ │ └── quick-start-security.xml
│ │ │ │ │ └── server.xml
│ │ │ │ ├── java
│ │ │ │ └── dev
│ │ │ │ │ └── appsody
│ │ │ │ │ └── starter
│ │ │ │ │ ├── StarterApplication.java
│ │ │ │ │ ├── StarterResource.java
│ │ │ │ │ └── health
│ │ │ │ │ ├── StarterLivenessCheck.java
│ │ │ │ │ └── StarterReadinessCheck.java
│ │ │ │ └── webapp
│ │ │ │ └── WEB-INF
│ │ │ │ └── beans.xml
│ │ │ ├── .vscode
│ │ │ └── launch.json
│ │ │ └── .gitignore
│ └── stack.yaml
└── java-spring-boot2
│ ├── image
│ ├── .dockerignore
│ ├── project
│ │ ├── .dockerignore
│ │ ├── .appsody-init.bat
│ │ ├── util
│ │ │ └── RangeIncludesVersion.java
│ │ └── .appsody-init.sh
│ ├── mvn-stack-settings.xml
│ └── config
│ │ └── app-deploy.yaml
│ ├── templates
│ ├── default
│ │ ├── src
│ │ │ └── main
│ │ │ │ ├── resources
│ │ │ │ ├── application.properties
│ │ │ │ └── public
│ │ │ │ │ └── index.html
│ │ │ │ └── java
│ │ │ │ └── application
│ │ │ │ ├── Main.java
│ │ │ │ └── LivenessEndpoint.java
│ │ ├── .vscode
│ │ │ └── launch.json
│ │ ├── .gitignore
│ │ └── pom.xml
│ ├── kotlin
│ │ ├── src
│ │ │ └── main
│ │ │ │ ├── resources
│ │ │ │ ├── application.properties
│ │ │ │ └── public
│ │ │ │ │ └── index.html
│ │ │ │ └── kotlin
│ │ │ │ └── application
│ │ │ │ ├── Main.kt
│ │ │ │ ├── Hello.kt
│ │ │ │ └── LivenessEndpoint.kt
│ │ ├── .vscode
│ │ │ └── launch.json
│ │ └── .gitignore
│ └── kafka
│ │ ├── src
│ │ └── main
│ │ │ ├── java
│ │ │ └── application
│ │ │ │ ├── Main.java
│ │ │ │ ├── KafkaConsumer.java
│ │ │ │ ├── config
│ │ │ │ └── KafkaProducer.java
│ │ │ │ └── LivenessEndpoint.java
│ │ │ └── resources
│ │ │ ├── application.properties
│ │ │ ├── application-test.properties
│ │ │ └── public
│ │ │ └── index.html
│ │ └── .gitignore
│ └── stack.yaml
├── .gitattributes
├── .github
├── ISSUE_TEMPLATE
│ ├── question.md
│ ├── feature_request.md
│ └── bug_report.md
└── PULL_REQUEST_TEMPLATE.md
├── samples
└── sample-stack
│ ├── image
│ ├── project
│ │ └── Dockerfile
│ ├── config
│ │ └── app-deploy.yaml
│ └── Dockerfile-stack
│ ├── README.md
│ ├── stack.yaml
│ └── templates
│ └── hello
│ └── .vscode
│ └── tasks.json
├── .gitignore
├── ci
├── nginx
│ ├── Dockerfile
│ ├── startup.sh
│ ├── docker-compose.yml
│ └── nginx.conf
├── ext
│ └── pre_env.d
│ │ └── 10_travis
├── build.sh
├── git_setup.sh
├── release.sh
└── list.sh
├── .travis.yml
└── pom.xml
/stable/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/experimental/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/test/__init__.py:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/incubator/node-red/templates/simple/flow_cred.json:
--------------------------------------------------------------------------------
1 | []
2 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/templates/simple/test/test.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/views/index.pug:
--------------------------------------------------------------------------------
1 | h1 #{msg}
2 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.npmrc:
--------------------------------------------------------------------------------
1 | package-lock=true
2 |
--------------------------------------------------------------------------------
/incubator/starter/templates/simple/hello.sh:
--------------------------------------------------------------------------------
1 | echo "Hello from Appsody!"
--------------------------------------------------------------------------------
/experimental/go-modules/templates/default/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/example
2 |
--------------------------------------------------------------------------------
/incubator/nodejs/templates/simple/app.js:
--------------------------------------------------------------------------------
1 | console.log("Hello from Node.js 12!")
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/server/routes/__init__.py:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/incubator/starter/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.git
2 | **/.gitignore
3 | **/.vscode
--------------------------------------------------------------------------------
/experimental/rust-tide/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.git
2 | **/.gitignore
3 | **/.vscode
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/server/bin/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 | Cargo.lock
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.prettierignore:
--------------------------------------------------------------------------------
1 | dist
2 | *.json
3 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Sources/AppsodyKitura/Routes/.keep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/incubator/starter/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.git
2 | **/.gitignore
3 | **/.vscode
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/Sources/simple/main.swift:
--------------------------------------------------------------------------------
1 | print("Hello, world!")
2 |
--------------------------------------------------------------------------------
/experimental/go-modules/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.git
2 | **/.gitignore
3 | **/.vscode
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.git
2 | **/.gitignore
3 | **/.vscode
--------------------------------------------------------------------------------
/experimental/vertx/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/quarkus/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/starter/templates/simple/tests/test.sh:
--------------------------------------------------------------------------------
1 | echo "Running tests for Hello from Appsody!"
--------------------------------------------------------------------------------
/incubator/kitura/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.build
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 |
--------------------------------------------------------------------------------
/incubator/node-red/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/swift/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.build
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 |
--------------------------------------------------------------------------------
/experimental/vertx/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/kitura/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.build
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/quarkus/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/swift/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/.build
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 |
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 |
--------------------------------------------------------------------------------
/experimental/rust/templates/simple/src/main.rs:
--------------------------------------------------------------------------------
1 | fn main() {
2 | println!("Hello from Appsody!");
3 | }
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/node-red/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-express/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/controllers/index.ts:
--------------------------------------------------------------------------------
1 | export * from './ping.controller';
2 |
--------------------------------------------------------------------------------
/incubator/nodejs/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-express/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | *.xcodeproj
5 | .swiftpm
6 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | dist/
3 | coverage/
4 | .eslintrc.js
5 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text eol=lf
2 | *.bat text eol=crlf
3 | *.cmd text eol=crlf
4 | cargo-add -text
5 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.yo-rc.json:
--------------------------------------------------------------------------------
1 | {
2 | "@loopback/cli": {
3 | "version": "2.2.1"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Question
3 | about: Ask a question or start a discussion.
4 | ---
5 |
6 | ## Summary
--------------------------------------------------------------------------------
/experimental/nodejs-functions/image/.dockerignore:
--------------------------------------------------------------------------------
1 | **/node_modules
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 | **/Dockerfile-stack
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: '@loopback/eslint-config',
3 | };
4 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/__tests__/README.md:
--------------------------------------------------------------------------------
1 | # Tests
2 |
3 | Please place your tests in this folder.
4 |
--------------------------------------------------------------------------------
/experimental/rocket/image/project/cargo-add:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/appsody/stacks/HEAD/experimental/rocket/image/project/cargo-add
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/.mocharc.json:
--------------------------------------------------------------------------------
1 | {
2 | "recursive": true,
3 | "require": "source-map-support/register"
4 | }
5 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | **/target
2 | **/.git
3 | **/.gitignore
4 | **/.vscode
5 | **/.appsody-spring-trigger
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.mocharc.json:
--------------------------------------------------------------------------------
1 | {
2 | "recursive": true,
3 | "require": "source-map-support/register"
4 | }
5 |
--------------------------------------------------------------------------------
/experimental/rocket/image/.dockerignore:
--------------------------------------------------------------------------------
1 | # ignore rust build artifacts
2 | **/target
3 | **/*.rs.bk
4 |
5 | **/.git
6 | **/.gitignore
7 | **/.vscode
--------------------------------------------------------------------------------
/experimental/rust/image/.dockerignore:
--------------------------------------------------------------------------------
1 | # ignore rust build artifacts
2 | **/target
3 | **/*.rs.bk
4 |
5 | **/.git
6 | **/.gitignore
7 | **/.vscode
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/Sources/server/main.swift:
--------------------------------------------------------------------------------
1 | import Application
2 |
3 | let app = App()
4 | app.setUpRoutes()
5 | app.run()
6 |
--------------------------------------------------------------------------------
/incubator/nodejs/templates/simple/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-simple",
3 | "version": "0.1.0",
4 | "lockfileVersion": 1
5 | }
6 |
--------------------------------------------------------------------------------
/experimental/rust/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | # ignore rust build artifacts
2 | **/target
3 | **/*.rs.bk
4 |
5 | **/.git
6 | **/.gitignore
7 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/models/README.md:
--------------------------------------------------------------------------------
1 | # Models
2 |
3 | This directory contains code for models provided by this app.
4 |
--------------------------------------------------------------------------------
/experimental/rocket/image/project/.dockerignore:
--------------------------------------------------------------------------------
1 | # ignore rust build artifacts
2 | **/target
3 | **/*.rs.bk
4 |
5 | **/.git
6 | **/.gitignore
7 | **/.vscode
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/datasources/README.md:
--------------------------------------------------------------------------------
1 | # Datasources
2 |
3 | This directory contains config for datasources used by this app.
4 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/repositories/README.md:
--------------------------------------------------------------------------------
1 | # Repositories
2 |
3 | This directory contains code for repositories provided by this app.
4 |
--------------------------------------------------------------------------------
/experimental/go-modules/templates/default/app.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | )
6 |
7 | func main() {
8 | fmt.Println("Hello, world!")
9 | }
10 |
--------------------------------------------------------------------------------
/incubator/node-red/templates/simple/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SampleAppsody-Node-RED-Project",
3 | "version": "0.1.0",
4 | "lockfileVersion": 1
5 | }
6 |
--------------------------------------------------------------------------------
/samples/sample-stack/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Dockerfile for building your application. Defines the final image that contains content from both the image and template.
2 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/sequence.ts:
--------------------------------------------------------------------------------
1 | import {MiddlewareSequence} from '@loopback/rest';
2 |
3 | export class MySequence extends MiddlewareSequence {}
4 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/templates/simple/function.js:
--------------------------------------------------------------------------------
1 | module.exports.url = '/'
2 | module.exports.get = function(req, res, next) {
3 | res.send('Hello from Appsody!')
4 | }
5 |
--------------------------------------------------------------------------------
/experimental/rust-tide/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | /target
2 |
3 |
4 | #Added by cargo
5 | #
6 | #already existing elements were commented out
7 |
8 | #/target
9 | Cargo.lock
10 |
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | @testable import ApplicationTests
4 |
5 | XCTMain([
6 | testCase(KituraStackTests.allTests),
7 | ])
8 |
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import simpleTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += simpleTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/experimental/rust-tide/templates/default/src/lib.rs:
--------------------------------------------------------------------------------
1 | pub fn app() -> tide::Server<()> {
2 | let mut api = tide::new();
3 | api.at("/").get(|_| async { Ok("Hello, world!") });
4 | api
5 | }
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | @testable import KituraAppsodyTests
4 |
5 | XCTMain([
6 | testCase(RouteTests.allTests),
7 | ])
8 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "bracketSpacing": false,
3 | "singleQuote": true,
4 | "printWidth": 80,
5 | "trailingComma": "all",
6 | "arrowParens": "avoid"
7 | }
8 |
--------------------------------------------------------------------------------
/incubator/quarkus/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | which java 2>&1 >/dev/null ; JAVA_KNOWN=$?
3 | if [ ! -z "$JAVA_HOME" ] || [ $JAVA_KNOWN = "0" ]; then
4 | ./mvnw install -Denforcer.skip=true
5 | fi
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/liberty/config/configDropins/defaults/quick-start-security.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | which java 2>&1 >/dev/null ; JAVA_KNOWN=$?
3 | if [ ! -z "$JAVA_HOME" ] || [ $JAVA_KNOWN = "0" ]; then
4 | ./mvnw install -Denforcer.skip=true
5 | fi
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/server-dev.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | managedBeans-1.0
4 | websocket-1.1
5 |
6 |
7 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/liberty/config/configDropins/defaults/quick-start-security.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | which java 2>&1 >/dev/null ; JAVA_KNOWN=$?
3 | if [ ! -z "$JAVA_HOME" ] || [ $JAVA_KNOWN = "0" ]; then
4 | ./mvnw install -Denforcer.skip=true
5 | fi
--------------------------------------------------------------------------------
/incubator/python-flask/templates/simple/Pipfile:
--------------------------------------------------------------------------------
1 | [[source]]
2 | name = "pypi"
3 | url = "https://pypi.org/simple"
4 | verify_ssl = true
5 |
6 | [dev-packages]
7 |
8 | [packages]
9 |
10 | [requires]
11 | python_version = "3.7"
12 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | #enable the actuator endpoints for health, metrics, and prometheus.
2 | management.endpoints.web.exposure.include=health,metrics,prometheus,liveness
3 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/kafka/test/test.js:
--------------------------------------------------------------------------------
1 | describe('Node.js Kafka Simple template', () => {
2 | describe('app', () => {
3 | it('can be required', () => {
4 | const App = require('../');
5 | });
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/incubator/quarkus/image/project/.appsody-init.bat:
--------------------------------------------------------------------------------
1 | setlocal
2 | set JAVA_FOUND=0
3 | where java >nul 2>nul
4 | if %ERRORLEVEL% EQU 0 set JAVA_FOUND=1
5 | if defined JAVA_HOME set JAVA_FOUND=1
6 | if "%JAVA_FOUND%"=="1" mvnw install -Denforcer.skip=true
7 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/.appsody-init.bat:
--------------------------------------------------------------------------------
1 | setlocal
2 | set JAVA_FOUND=0
3 | where java >nul 2>nul
4 | if %ERRORLEVEL% EQU 0 set JAVA_FOUND=1
5 | if defined JAVA_HOME set JAVA_FOUND=1
6 | if "%JAVA_FOUND%"=="1" mvnw install -Denforcer.skip=true
7 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/project/.appsody-init.bat:
--------------------------------------------------------------------------------
1 | setlocal
2 | set JAVA_FOUND=0
3 | where java >nul 2>nul
4 | if %ERRORLEVEL% EQU 0 set JAVA_FOUND=1
5 | if defined JAVA_HOME set JAVA_FOUND=1
6 | if "%JAVA_FOUND%"=="1" mvnw install -Denforcer.skip=true
7 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/project/.appsody-init.bat:
--------------------------------------------------------------------------------
1 | setlocal
2 | set JAVA_FOUND=0
3 | where java >nul 2>nul
4 | if %ERRORLEVEL% EQU 0 set JAVA_FOUND=1
5 | if defined JAVA_HOME set JAVA_FOUND=1
6 | if "%JAVA_FOUND%"==1 mvnw install -Denforcer.skip=true
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/Tests/simpleTests/XCTestManifests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | #if !canImport(ObjectiveC)
4 | public func allTests() -> [XCTestCaseEntry] {
5 | return [
6 | testCase(simpleTests.allTests),
7 | ]
8 | }
9 | #endif
10 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | #enable the actuator endpoints for health, metrics, and prometheus.
2 | management.endpoints.web.exposure.include=health,metrics,prometheus,liveness
3 | opentracing.jaeger.log-spans = false
4 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | #enable the actuator endpoints for health, metrics, and prometheus.
2 | management.endpoints.web.exposure.include=health,metrics,prometheus,liveness
3 | opentracing.jaeger.log-spans = false
4 |
--------------------------------------------------------------------------------
/samples/sample-stack/README.md:
--------------------------------------------------------------------------------
1 | # Sample Stack
2 |
3 | Readme explaining in detail about this stack
4 |
5 | Explain the stack and each template that is part of the stack
6 |
7 | - How can a user start using this pack for application development
8 |
9 | - links to getting started guides etc.
--------------------------------------------------------------------------------
/experimental/rust-tide/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Rust Tide
2 | version: 0.3.0
3 | description: Tide web framework for Rust
4 | license: Apache-2.0
5 | language: rust
6 | maintainers:
7 | - name: Anton Whalley
8 | email: anton@venshare.com
9 | github-id: No9
10 | default-template: default
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/tsconfig",
3 | "extends": "@loopback/build/config/tsconfig.common.json",
4 | "compilerOptions": {
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": ["src"]
9 | }
10 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "http://json.schemastore.org/tsconfig",
3 | "extends": "@loopback/build/config/tsconfig.common.json",
4 | "compilerOptions": {
5 | "outDir": "dist",
6 | "rootDir": "src"
7 | },
8 | "include": ["src"]
9 | }
10 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/Pipfile:
--------------------------------------------------------------------------------
1 | [[source]]
2 | name = "pypi"
3 | url = "https://pypi.org/simple"
4 | verify_ssl = true
5 |
6 | [dev-packages]
7 |
8 | [packages]
9 | Flask = "==1.1.1"
10 | flasgger = "==0.9.3"
11 | prometheus_client = "*"
12 |
13 | [requires]
14 | python_version = "3.7"
--------------------------------------------------------------------------------
/incubator/node-red/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Node-RED
2 | version: 0.1.3
3 | description: Node-RED runtime for running flows
4 | license: Apache-2.0
5 | language: nodejs
6 | maintainers:
7 | - name: Nick O'Leary
8 | email: nick.oleary@gmail.com
9 | github-id: knolleary
10 | default-template: simple
11 |
--------------------------------------------------------------------------------
/experimental/vertx/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Eclipse Vert.x
2 | version: 0.1.4
3 | description: Eclipse Vert.x runtime for running Java applications
4 | license: EPL-2.0
5 | language: java
6 | maintainers:
7 | - name: Erik Jan de Wit
8 | email: edewit@redhat.com
9 | github-id: edewit
10 | default-template: default
--------------------------------------------------------------------------------
/incubator/starter/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Starter Sample
2 | version: 0.1.3
3 | description: Runnable starter stack, copy to create a new stack
4 | license: Apache-2.0
5 | language: bash
6 | maintainers:
7 | - name: Henry Nash
8 | email: henry.nash@uk.ibm.com
9 | github-id: henrynash
10 | default-template: simple
--------------------------------------------------------------------------------
/experimental/go-modules/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Go Modules
2 | version: 0.1.0
3 | description: Runtime for Go using Go 1.11+ modules for dependencies
4 | license: Apache-2.0
5 | language: go
6 | maintainers:
7 | - name: John Pape
8 | email: jpapejr@icloud.com
9 | github-id: jpapejr
10 | default-template: default
11 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/java/dev/appsody/starter/StarterApplication.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter;
2 |
3 | import javax.ws.rs.ApplicationPath;
4 | import javax.ws.rs.core.Application;
5 |
6 | @ApplicationPath("/starter")
7 | public class StarterApplication extends Application {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/java/dev/appsody/starter/StarterApplication.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter;
2 |
3 | import javax.ws.rs.ApplicationPath;
4 | import javax.ws.rs.core.Application;
5 |
6 | @ApplicationPath("/starter")
7 | public class StarterApplication extends Application {
8 |
9 | }
10 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/server/__init__.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 |
3 | app = Flask(__name__)
4 |
5 | from userapp import *
6 |
7 | from server.routes.health import health_bp
8 | app.register_blueprint(health_bp)
9 | from server.routes.prometheus import metrics_bp
10 | app.register_blueprint(metrics_bp)
11 |
12 |
--------------------------------------------------------------------------------
/experimental/rust/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | version: 1.0.0
7 | applicationImage: APPSODY_DOCKER_IMAGE
8 | stack: rust
9 | service:
10 | type: NodePort
11 | port: APPSODY_PORT
12 | expose: true
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/constraints.txt:
--------------------------------------------------------------------------------
1 | # Remove this file when the the next flasgger release comes out that fixes the
2 | # issue that the current requireent is incorrectly set at < 3.0.0. At that point we
3 | # can add flasgger back into the regular xx and remove the specific install in Dockerfile-stack
4 | jsonschema>3.0.0
5 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/src/test/java/org/acme/quickstart/NativeGreetingResourceIT.java:
--------------------------------------------------------------------------------
1 | package org.acme.quickstart;
2 |
3 | import io.quarkus.test.junit.NativeImageTest;
4 |
5 | @NativeImageTest
6 | public class NativeGreetingResourceIT extends GreetingResourceTest {
7 |
8 | // Execute the same tests but in native mode.
9 | }
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 5005
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /ci/assets
2 | /ci/package
3 | /ci/build
4 | /ci/release
5 | /ci/nginx/docker-compose.override.yml
6 | **/00_local
7 | **/.DS_Store
8 | **/node_modules
9 | **/cli
10 | **/*.log
11 | **/target
12 | **/.settings
13 | **/.project
14 | **/.classpath
15 | .*.swp
16 | __pycache__/
17 | *.py[cod]
18 |
19 | ### Intellij ###
20 | *.iml
21 | .idea
22 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 5005
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/src/main/java/org/acme/quickstart/GreetingService.java:
--------------------------------------------------------------------------------
1 | package org.acme.quickstart;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | @ApplicationScoped
6 | public class GreetingService {
7 |
8 | public String greeting(String name) {
9 | return "hello " + name;
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/experimental/rust/templates/simple/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rust-simple"
3 | version = "0.1.0"
4 | authors = ["Name "]
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 |
11 | [[bin]]
12 | name = "rust-simple"
13 | path = "src/main.rs"
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 5005
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 7777
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 5005
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 7777
10 | }
11 | ]
12 | }
13 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/src/main/kotlin/application/Main.kt:
--------------------------------------------------------------------------------
1 | package application
2 |
3 | import org.springframework.boot.autoconfigure.SpringBootApplication
4 | import org.springframework.boot.runApplication
5 |
6 | @SpringBootApplication
7 | class Main
8 |
9 | fun main(args: Array) {
10 | runApplication(*args)
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/incubator/nodejs/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | expose: true
14 |
--------------------------------------------------------------------------------
/incubator/quarkus/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Quarkus
2 | version: 0.5.1
3 | description: Quarkus runtime for running Java applications
4 | license: Apache-2.0
5 | language: java
6 | maintainers:
7 | - name: Paul Robinson
8 | email: probinso@redhat.com
9 | github-id: paulrobinson
10 | default-template: default
11 | requirements:
12 | appsody-version: ">= 0.6.0"
13 |
--------------------------------------------------------------------------------
/incubator/swift/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | expose: true
14 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach java debugger",
6 | "type": "java",
7 | "request": "attach",
8 | "hostName": "localhost",
9 | "port": 7777
10 | }
11 | ]
12 | }
--------------------------------------------------------------------------------
/experimental/go-modules/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | expose: true
14 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/java/dev/appsody/starter/StarterResource.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter;
2 |
3 | import javax.ws.rs.GET;
4 | import javax.ws.rs.Path;
5 |
6 | @Path("/resource")
7 | public class StarterResource {
8 |
9 | @GET
10 | public String getRequest() {
11 | return "StarterResource response";
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [{
4 | "name": "Appsody: Attach node debugger",
5 | "type": "node",
6 | "request": "attach",
7 | "port": 9229,
8 | "remoteRoot": "/project/user-app",
9 | "localRoot": "${workspaceFolder}",
10 | "protocol": "inspector"
11 | }]
12 | }
13 |
--------------------------------------------------------------------------------
/incubator/starter/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Dockerfile for building your application.
2 | # Defines the final image that contains content from both the image and template.
3 |
4 | FROM registry.access.redhat.com/ubi7/ubi
5 |
6 | WORKDIR /project
7 |
8 | COPY . ./
9 |
10 | EXPOSE 8080
11 |
12 | # Pass control your application
13 | CMD ["/bin/bash", "/project/userapp/hello.sh"]
--------------------------------------------------------------------------------
/experimental/rust/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Rust
2 | version: 0.3.0
3 | description: Runtime for Rust applications
4 | license: Apache-2.0
5 | language: rust
6 | maintainers:
7 | - name: Sandy Koh
8 | email: sandy.koh@ibm.com
9 | github-id: skoh7645
10 | - name: Enrique Lacal
11 | email: enrique.lacal.bereslawski@ibm.com
12 | github-id: EnriqueL8
13 | default-template: simple
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/routes/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | router.get('/', (req, res) => {
5 | // Use req.log (a `pino` instance) to log JSON:
6 | req.log.info({message: 'Hello Express!!!'});
7 | res.render('index', {msg: 'Hello Express!!!'});
8 | });
9 |
10 | module.exports = router;
11 |
--------------------------------------------------------------------------------
/experimental/rocket/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Rocket
2 | version: 0.1.1
3 | description: Rocket web framework for Rust
4 | license: Apache-2.0
5 | language: rust
6 | maintainers:
7 | - name: Sandy Koh
8 | email: sandy.koh@ibm.com
9 | github-id: skoh7645
10 | - name: Enrique Lacal
11 | email: enrique.lacal.bereslawski@ibm.com
12 | github-id: EnriqueL8
13 | default-template: simple
--------------------------------------------------------------------------------
/incubator/kitura/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Kitura
2 | version: 0.2.6
3 | description: Runtime for Kitura applications
4 | license: Apache-2.0
5 | language: swift
6 | maintainers:
7 | - name: Ian Partridge
8 | email: i.partridge@uk.ibm.com
9 | github-id: ianpartridge
10 | - name: David Jones
11 | email: djones6@uk.ibm.com
12 | github-id: djones6
13 | default-template: default
14 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/webapp/WEB-INF/beans.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/incubator/nodejs/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Node.js
2 | version: 0.4.0
3 | description: Runtime for Node.js applications
4 | license: Apache-2.0
5 | language: nodejs
6 | maintainers:
7 | - name: Gireesh Punathil
8 | email: gpunathi@in.ibm.com
9 | github-id: gireeshpunathil
10 | default-template: simple
11 | requirements:
12 | docker-version: ">= 17.09.0"
13 | appsody-version: ">= 0.2.7"
14 |
--------------------------------------------------------------------------------
/experimental/rocket/templates/simple/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
7 | Cargo.lock
8 |
9 | # These are backup files generated by rustfmt
10 | **/*.rs.bk
--------------------------------------------------------------------------------
/experimental/rust/templates/simple/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | # will have compiled files and executables
3 | /target/
4 |
5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
7 | Cargo.lock
8 |
9 | # These are backup files generated by rustfmt
10 | **/*.rs.bk
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/src/main/kotlin/application/Hello.kt:
--------------------------------------------------------------------------------
1 | package application
2 |
3 | import org.springframework.web.bind.annotation.RestController
4 | import org.springframework.web.bind.annotation.GetMapping
5 |
6 | @RestController
7 | class Hello {
8 |
9 | @GetMapping("/hello")
10 | fun hello(): String {
11 | return "Hello, Appsody!"
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/server/bin/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rust:1.44.0-buster
2 | # This file is used to publish the server as a base image.
3 | # docker build -t docker.io/number9/rust-tide-base:v1.0.0 .
4 | # docker push docker.io/number9/rust-tide-base:v1.0.0 .
5 |
6 | WORKDIR "/project/server/bin"
7 |
8 | COPY Cargo.toml ./
9 |
10 | WORKDIR "/project/server/bin/src"
11 |
12 | COPY src ./
13 |
--------------------------------------------------------------------------------
/incubator/node-red/templates/simple/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "SampleAppsody-Node-RED-Project",
3 | "description": "A sample Node-RED Project created with Appsody",
4 | "version": "0.1.0",
5 | "dependencies": {},
6 | "node-red": {
7 | "settings": {
8 | "flowFile": "flow.json",
9 | "credentialsFile": "flow_cred.json"
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/stack.yaml:
--------------------------------------------------------------------------------
1 | name: LoopBack 4
2 | version: 0.4.0
3 | description: LoopBack 4 API Framework for Node.js
4 | maintainers:
5 | - name: Raymond Feng
6 | email: enjoyjava@gmail.com
7 | github-id: raymondfeng
8 | default-template: scaffold
9 | language: nodejs
10 | license: Apache-2.0
11 | requirements:
12 | docker-version: ">= 17.09.0"
13 | appsody-version: ">= 0.2.7"
14 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/java/application/Main.java:
--------------------------------------------------------------------------------
1 | package application;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Main {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(Main.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/experimental/rocket/templates/simple/src/tests.rs:
--------------------------------------------------------------------------------
1 | use super::rocket;
2 | use rocket::local::Client;
3 | use rocket::http::Status;
4 |
5 | #[test]
6 | fn hello_world() {
7 | let client = Client::new(rocket()).unwrap();
8 | let mut response = client.get("/").dispatch();
9 | assert_eq!(response.status(), Status::Ok);
10 | assert_eq!(response.body_string(), Some("Hello from Appsody!".into()));
11 | }
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/src/main/java/application/Main.java:
--------------------------------------------------------------------------------
1 | package application;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Main {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(Main.class, args);
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Node.js Express
2 | version: 0.4.13
3 | description: Express web framework for Node.js
4 | license: Apache-2.0
5 | language: nodejs
6 | maintainers:
7 | - name: Gireesh Punathil
8 | email: gpunathi@in.ibm.com
9 | github-id: gireeshpunathil
10 | default-template: simple
11 | requirements:
12 | docker-version: ">= 17.09.0"
13 | appsody-version: ">= 0.2.7"
14 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/src/main/java/application/Main.java:
--------------------------------------------------------------------------------
1 | package application;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 |
6 | @SpringBootApplication
7 | public class Main {
8 |
9 | public static void main(String[] args) {
10 | SpringApplication.run(Main.class, args);
11 | }
12 |
13 | }
--------------------------------------------------------------------------------
/experimental/rust-tide/templates/default/tests/test-lib.rs:
--------------------------------------------------------------------------------
1 | use async_std::task;
2 |
3 | #[test]
4 | fn hello_world() -> Result<(), http_types::Error> {
5 | task::block_on(async {
6 | let string = surf::get(format!("http://127.0.0.1:{}", 8000))
7 | .recv_string()
8 | .await
9 | .unwrap();
10 | assert_eq!(string, "Hello, world!".to_string());
11 | Ok(())
12 | })
13 | }
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/app.js:
--------------------------------------------------------------------------------
1 | module.exports = (/*options*/) => {
2 | // Use options.server to access http.Server. Example of socket.io:
3 | // const io = require('socket.io')(options.server)
4 | const app = require('express')()
5 |
6 | app.set('views', __dirname + "/views");
7 | app.set('view engine', 'pug');
8 |
9 | app.use('/', require('./routes'));
10 |
11 | return app;
12 | };
13 |
--------------------------------------------------------------------------------
/experimental/rocket/templates/simple/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rocket-simple"
3 | version = "0.1.0"
4 | authors = ["Name "]
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 | appsody-rocket = { path = ".appsody" }
11 | rocket = "0.4.2"
12 |
13 | [[bin]]
14 | name = "rocket-simple"
15 | path = "src/main.rs"
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/controllers/README.md:
--------------------------------------------------------------------------------
1 | # Controllers
2 |
3 | This directory contains source files for the controllers exported by this app.
4 |
5 | To add a new empty controller, type in `lb4 controller []` from the
6 | command-line of your application's root directory.
7 |
8 | For more information, please visit
9 | [Controller generator](http://loopback.io/doc/en/lb4/Controller-generator.html).
10 |
--------------------------------------------------------------------------------
/incubator/nodejs/image/project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs",
3 | "version": "0.3.6",
4 | "description": "Node.js Stack",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/appsody/stacks.git",
9 | "directory": "incubator/nodejs/image/project"
10 | },
11 | "dependencies": {},
12 | "devDependencies": {
13 | "appmetrics-dash": "^5.0.0"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/test-stack.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | cargo build --manifest-path ../server/bin/Cargo.toml
4 | cargo run --manifest-path ../server/bin/Cargo.toml &
5 |
6 | until $(curl --output /dev/null --silent --head --fail http://127.0.0.1:8000); do
7 | printf '.';
8 | sleep 0.2;
9 | done
10 |
11 | cargo test --manifest-path ../server/bin/Cargo.toml -p rust-tide-default
12 | kill -9 $(pidof rust-tide-server)
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | !.keep
2 |
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /nbbuild/
22 | /dist/
23 | /nbdist/
24 | /.nb-gradle/
25 | /build/
26 |
27 | ### VS Code ###
28 | .vscode/
29 |
--------------------------------------------------------------------------------
/experimental/go-modules/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Install the app dependencies in a full Node docker image
2 | FROM golang:1.12-alpine3.10
3 |
4 |
5 | # Install user-app dependencies
6 | WORKDIR "/project/user-app"
7 | RUN apk add --update git bash
8 | COPY ./user-app/* ./
9 | RUN if [ -e /project/user-app/.vendor-me.sh ]; then bash /project/user-app/.vendor-me.sh; fi
10 | RUN go build -o /app ./...
11 | RUN chmod +x /app
12 | CMD ["/app"]
13 |
--------------------------------------------------------------------------------
/experimental/rocket/image/project/deps/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "appsody-rocket"
3 | version = "0.1.0"
4 | description = "Package containing dependencies for the Appsody Rocket stack"
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 | rocket = "0.4.2"
11 | rocket_prometheus = "0.3.0"
12 |
13 | [lib]
14 | path = "src/lib.rs"
15 | test = true
--------------------------------------------------------------------------------
/incubator/quarkus/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | monitoring:
14 | labels:
15 | k8s-app: APPSODY_PROJECT_NAME
16 | expose: true
17 |
--------------------------------------------------------------------------------
/incubator/swift/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Swift
2 | version: 0.3.0
3 | description: Appsody runtime for Swift applications
4 | license: Apache-2.0
5 | language: swift
6 | maintainers:
7 | - name: Ian Partridge
8 | email: i.partridge@uk.ibm.com
9 | github-id: ianpartridge
10 | - name: David Jones
11 | email: djones6@uk.ibm.com
12 | github-id: djones6
13 | default-template: simple
14 | requirements:
15 | appsody-version: ">= 0.2.7"
16 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | /target/*
2 | !.keep
3 |
4 |
5 | ### STS ###
6 | .apt_generated
7 | .classpath
8 | .factorypath
9 | .project
10 | .settings
11 | .springBeans
12 | .sts4-cache
13 |
14 | ### IntelliJ IDEA ###
15 | .idea
16 | *.iws
17 | *.iml
18 | *.ipr
19 |
20 | ### NetBeans ###
21 | /nbproject/private/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
26 | /build/
27 |
28 | ### VS Code ###
29 | .vscode/
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/liberty/config/server.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | microProfile-3.0
4 |
5 |
6 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/liberty/config/server.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | microProfile-3.2
4 |
5 |
6 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/project/.appsody-init.bat:
--------------------------------------------------------------------------------
1 | if not exist %SystemDrive%%HOMEPATH%\.m2\repository\ (
2 | mkdir %SystemDrive%%HOMEPATH%\.m2\repository
3 | )
4 |
5 | copy mvnw*.* .. >nul
6 | mkdir ..\.mvn
7 | robocopy .mvn ..\.mvn /e /njh /njs /ndl /nc /ns >nul
8 |
9 | where java >nul 2>nul
10 | if %ERRORLEVEL% EQU 0 (
11 | if defined JAVA_HOME (
12 | ..\mvnw install -q -f ./{{.stack.parentpomfilename}}
13 | )
14 | )
--------------------------------------------------------------------------------
/incubator/nodejs/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach node debugger",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "remoteRoot": "/project/user-app",
10 | "localRoot": "${workspaceFolder}",
11 | "protocol": "inspector"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/kafka/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach node debugger",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "remoteRoot": "/project/user-app",
10 | "localRoot": "${workspaceFolder}",
11 | "protocol": "inspector"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/.gitignore:
--------------------------------------------------------------------------------
1 | /target/*
2 | .appsody-spring-trigger
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /nbbuild/
22 | /dist/
23 | /nbdist/
24 | /.nb-gradle/
25 | /build/
26 |
27 | ### VS Code ###
28 | .vscode/
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach node debugger",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "remoteRoot": "/project/user-app",
10 | "localRoot": "${workspaceFolder}",
11 | "protocol": "inspector"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach node debugger",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "remoteRoot": "/project/user-app",
10 | "localRoot": "${workspaceFolder}",
11 | "protocol": "inspector"
12 | }
13 | ]
14 | }
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | /target/*
2 | !.keep
3 |
4 |
5 | ### STS ###
6 | .apt_generated
7 | .classpath
8 | .factorypath
9 | .project
10 | .settings
11 | .springBeans
12 | .sts4-cache
13 |
14 | ### IntelliJ IDEA ###
15 | .idea
16 | *.iws
17 | *.iml
18 | *.ipr
19 |
20 | ### NetBeans ###
21 | /nbproject/private/
22 | /nbbuild/
23 | /dist/
24 | /nbdist/
25 | /.nb-gradle/
26 | /build/
27 |
28 | ### VS Code ###
29 | .vscode/
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/server/bin/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rust-tide-server"
3 | version = "0.1.0"
4 | authors = ["Anton Whalley "]
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 | tide = { version = "0.11" }
11 | async-std = { version = "1" }
12 | application = { package = "rust-tide-default", path = "/project/user-app"}
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/.gitignore:
--------------------------------------------------------------------------------
1 | /target/*
2 | .appsody-spring-trigger
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /nbbuild/
22 | /dist/
23 | /nbdist/
24 | /.nb-gradle/
25 | /build/
26 |
27 | ### VS Code ###
28 | .vscode/
29 |
--------------------------------------------------------------------------------
/incubator/nodejs/templates/simple/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-simple",
3 | "version": "0.1.0",
4 | "description": "Simple Node.js application",
5 | "license": "Apache-2.0",
6 | "scripts": {
7 | "start": "node app.js",
8 | "debug": "node --inspect app.js"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "https://github.com/appsody/stacks.git",
13 | "directory": "incubator/nodejs/templates/simple"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/.gitignore:
--------------------------------------------------------------------------------
1 | /target/*
2 | .appsody-spring-trigger
3 |
4 | ### STS ###
5 | .apt_generated
6 | .classpath
7 | .factorypath
8 | .project
9 | .settings
10 | .springBeans
11 | .sts4-cache
12 |
13 | ### IntelliJ IDEA ###
14 | .idea
15 | *.iws
16 | *.iml
17 | *.ipr
18 |
19 | ### NetBeans ###
20 | /nbproject/private/
21 | /nbbuild/
22 | /dist/
23 | /nbdist/
24 | /.nb-gradle/
25 | /build/
26 |
27 | ### VS Code ###
28 | .vscode/
29 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/install-dev-deps.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | mvn -Dmaven.repo.local=/mvn/repository dependency:copy-dependencies@copy-dropin dependency:copy-dependencies@copy-resource dependency:copy-dependencies@copy-asm -f /project/pom-dev.xml
3 | mkdir -p /project/user-app/target/liberty/wlp/usr/servers/defaultServer/configDropins/defaults
4 | cp /project/server-dev.xml /project/user-app/target/liberty/wlp/usr/servers/defaultServer/configDropins/defaults/server.xml
5 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Node.js Functions
2 | version: 0.2.1
3 | description: Serverless runtime for Node.js functions
4 | license: Apache-2.0
5 | language: nodejs
6 | maintainers:
7 | - name: Chris Bailey
8 | email: cnbailey@gmail.com
9 | github-id: seabaylea
10 | - name: Gireesh Punathil
11 | email: gpunathi@in.ibm.com
12 | github-id: gireeshpunathil
13 | default-template: simple
14 | requirements:
15 | appsody-version: ">= 0.2.7"
16 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Appsody: Attach node debugger",
6 | "type": "node",
7 | "request": "attach",
8 | "port": 9229,
9 | "remoteRoot": "/project/user-app/functions",
10 | "localRoot": "${workspaceFolder}",
11 | "protocol": "inspector"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/experimental/rocket/templates/simple/src/main.rs:
--------------------------------------------------------------------------------
1 | #![feature(proc_macro_hygiene, decl_macro)]
2 |
3 | use appsody_rocket;
4 |
5 | #[macro_use] extern crate rocket;
6 |
7 | #[get("/")]
8 | fn world() -> &'static str {
9 | "Hello from Appsody!"
10 | }
11 |
12 | fn rocket() -> rocket::Rocket {
13 | appsody_rocket::initialize_metrics().mount("/", routes![world])
14 | }
15 |
16 | fn main() {
17 | rocket().launch();
18 | }
19 |
20 | #[cfg(test)]
21 | mod tests;
22 |
23 |
--------------------------------------------------------------------------------
/incubator/python-flask/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Python Flask
2 | version: 0.2.4
3 | description: Flask web Framework for Python
4 | language: python
5 | maintainers:
6 | - name: Chris Bailey
7 | email: cnbailey@gmail.com
8 | github-id: seabaylea
9 | - name: Henry Nash
10 | email: henry.nash@uk.ibm.com
11 | github-id: henrynash
12 | default-template: simple
13 | license: Apache-2.0
14 | requirements:
15 | appsody-version: ">= 0.2.7"
16 | docker-version: ">= 17.09.0"
17 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/simple/app.js:
--------------------------------------------------------------------------------
1 | module.exports = (/*options*/) => {
2 | // Use options.server to access http.Server. Example with socket.io:
3 | // const io = require('socket.io')(options.server)
4 | const app = require('express')()
5 |
6 | app.get('/', (req, res) => {
7 | // Use req.log (a `pino` instance) to log JSON:
8 | req.log.info({message: 'Hello from Appsody!'});
9 | res.send('Hello from Appsody!');
10 | });
11 |
12 | return app;
13 | };
14 |
--------------------------------------------------------------------------------
/experimental/rust-tide/templates/default/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rust-tide-default"
3 | version = "0.1.0"
4 | authors = ["Anton Whalley "]
5 | edition = "2018"
6 |
7 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8 |
9 | [dependencies]
10 | tide = { version = "0.11" }
11 | http-types = "2.0.1"
12 | async-std = { version = "1" }
13 | surf = { version = "2.0.0-alpha.3", default-features = false, features = ["h1-client"] }
--------------------------------------------------------------------------------
/experimental/rocket/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Create local copy of package dependencies to enable building while developing locally.
4 | #
5 | set -e
6 |
7 | # Current directory is .appsody-init, which is a child of the user's
8 | # project directory, so we copy the dependencies to a .appsody directory
9 | # one level up.
10 | ls && cp -R -p ./deps ../.appsody
11 |
12 | # Mark dependency source code as read-only
13 | find ../.appsody -type f -name '*.rs' -exec chmod ugo-w {} \;
--------------------------------------------------------------------------------
/incubator/starter/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | #Configuration file for deploying an appsody project
2 |
3 | #For more information, see: https://github.com/appsody/appsody-operator/blob/master/doc/user-guide.md
4 |
5 | apiVersion: appsody.dev/v1beta1
6 | kind: AppsodyApplication
7 | metadata:
8 | name: APPSODY_PROJECT_NAME
9 | spec:
10 | version: 1.0.0
11 | applicationImage: APPSODY_DOCKER_IMAGE
12 | stack: APPSODY_STACK
13 | service:
14 | type: NodePort
15 | port: APPSODY_PORT
16 | expose: true
--------------------------------------------------------------------------------
/samples/sample-stack/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | #Configuration file for deploying an appsody project
2 |
3 | #For more information, see: https://github.com/appsody/appsody-operator/blob/master/doc/user-guide.md
4 |
5 | apiVersion: appsody.dev/v1beta1
6 | kind: AppsodyApplication
7 | metadata:
8 | name: APPSODY_PROJECT_NAME
9 | spec:
10 | version: 1.0.0
11 | applicationImage: APPSODY_DOCKER_IMAGE
12 | stack: sample-stack
13 | service:
14 | type: NodePort
15 | port: APPSODY_PORT
16 | expose: true
--------------------------------------------------------------------------------
/experimental/rust-tide/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | #Configuration file for deploying an appsody project
2 |
3 | #For more information, see: https://github.com/appsody/appsody-operator/blob/master/doc/user-guide.md
4 |
5 | apiVersion: appsody.dev/v1beta1
6 | kind: AppsodyApplication
7 | metadata:
8 | name: APPSODY_PROJECT_NAME
9 | spec:
10 | version: 1.0.0
11 | applicationImage: APPSODY_DOCKER_IMAGE
12 | stack: APPSODY_STACK
13 | service:
14 | type: NodePort
15 | port: APPSODY_PORT
16 | expose: true
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Spring Boot® on Open Liberty
2 | version: 0.1.11
3 | description: Spring Boot on Open Liberty & OpenJ9 using Maven
4 | license: Apache-2.0
5 | language: java
6 | maintainers:
7 | - name: Ozzy
8 | email: ozzy@ca.ibm.com
9 | github-id: bardweller
10 | default-template: default
11 | requirements:
12 | appsody-version: ">= 0.5.0"
13 | templating-data:
14 | parentpomgroup: dev.appsody
15 | parentpomid: java-spring-boot2-liberty
16 | parentpomrange: '[0.1, 0.2)'
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/index.ts:
--------------------------------------------------------------------------------
1 | import {DemoApplication} from './application';
2 | import {ApplicationConfig} from '@loopback/core';
3 |
4 | export {DemoApplication};
5 |
6 | export async function main(options: ApplicationConfig = {}) {
7 | const app = new DemoApplication(options);
8 | await app.boot();
9 | await app.start();
10 |
11 | const url = app.restServer.url;
12 | console.log(`Server is running at ${url}`);
13 | console.log(`Try ${url}/ping`);
14 |
15 | return app;
16 | }
17 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | #
3 | # Create local copy of package dependencies to enable building and code
4 | # completion while developing locally.
5 | #
6 | set -e
7 |
8 | # Current directory is .appsody-init, which is a child of the user's
9 | # project directory, so we copy the dependencies to a .appsody directory
10 | # one level up.
11 | cp -R -p ./deps ../.appsody
12 |
13 | # Mark dependency source code as read-only
14 | find ../.appsody -type f -name '*.swift' -exec chmod ugo-w {} \;
15 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/test/apptests.py:
--------------------------------------------------------------------------------
1 | from server import app
2 | import unittest
3 |
4 | class ServerTestCase(unittest.TestCase):
5 |
6 | def setUp(self):
7 | # create a test client
8 | self.app = app.test_client()
9 | self.app.testing = True
10 |
11 | def tearDown(self):
12 | pass
13 |
14 | def test_health_endpoint(self):
15 | result = self.app.get('/health')
16 | assert b'UP' in result.data
17 |
18 | if __name__ == '__main__':
19 | unittest.main()
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/server/routes/health.py:
--------------------------------------------------------------------------------
1 | from flask import Blueprint,jsonify
2 | from flasgger import Swagger
3 |
4 | health_bp = Blueprint("health", __name__)
5 |
6 | @health_bp.route("/health")
7 | def Health():
8 | """Health of the service
9 | Return the status of the service.
10 | ---
11 | responses:
12 | 200:
13 | description: The state of the service
14 | examples:
15 | status: UP
16 | """
17 | state = {"status": "UP"}
18 | return jsonify(state)
19 |
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.1
2 | import PackageDescription
3 |
4 | let package = Package(
5 | name: "server",
6 | dependencies: [
7 | .package(path: ".appsody/AppsodyKitura"),
8 | ],
9 | targets: [
10 | .target(name: "server", dependencies: [ .target(name: "Application") ]),
11 | .target(name: "Application", dependencies: [ "AppsodyKitura" ]),
12 | .testTarget(name: "ApplicationTests" , dependencies: [.target(name: "Application"), "AppsodyKitura" ])
13 | ]
14 | )
15 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/kafka/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-express-kafka",
3 | "version": "1.0.0",
4 | "description": "Kafka Node.js Express application",
5 | "license": "Apache-2.0",
6 | "main": "app.js",
7 | "repository": {
8 | "type": "git",
9 | "url": "https://github.com/appsody/stacks.git",
10 | "directory": "incubator/nodejs-express/templates/kafka"
11 | },
12 | "scripts": {
13 | "test": "mocha"
14 | },
15 | "devDependencies": {
16 | "chai": "^4.2.0",
17 | "mocha": "^7.1.1"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/incubator/python-flask/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Python: Remote Attach",
6 | "type": "python",
7 | "request": "attach",
8 | "port": 5678,
9 | "host": "localhost",
10 | "pathMappings": [
11 | {
12 | "localRoot": "${workspaceFolder}/",
13 | "remoteRoot": "/project/userapp"
14 | }
15 | ]
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/experimental/rocket/image/project/deps/src/lib.rs:
--------------------------------------------------------------------------------
1 | #![feature(proc_macro_hygiene, decl_macro)]
2 |
3 | use rocket_prometheus::PrometheusMetrics;
4 | #[macro_use] extern crate rocket;
5 |
6 | #[get("/")]
7 | fn health() -> &'static str {
8 | "{ status: UP }"
9 | }
10 |
11 | pub fn initialize_metrics() -> rocket::Rocket {
12 | let prometheus = PrometheusMetrics::new();
13 | rocket::ignite()
14 | .mount("/health", routes![health])
15 | .attach(prometheus.clone())
16 | .mount("/metrics", prometheus)
17 | }
18 |
19 | #[cfg(test)]
20 | mod tests;
--------------------------------------------------------------------------------
/experimental/rocket/image/project/deps/src/tests.rs:
--------------------------------------------------------------------------------
1 | use rocket::local::Client;
2 | use rocket::http::Status;
3 | use crate::initialize_metrics;
4 |
5 | #[test]
6 | fn metrics() {
7 | let client = Client::new(initialize_metrics()).unwrap();
8 | let response = client.get("/metrics").dispatch();
9 | assert_eq!(response.status(), Status::Ok)
10 | }
11 |
12 | #[test]
13 | fn random() {
14 | let client = Client::new(initialize_metrics()).unwrap();
15 | let response = client.get("/random").dispatch();
16 | assert_eq!(response.status(), Status::NotFound);
17 | }
--------------------------------------------------------------------------------
/experimental/nodejs-functions/templates/simple/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-functions-simple",
3 | "version": "0.1.1",
4 | "description": "Simple Node.js Functions application",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/appsody/stacks.git",
9 | "directory": "experimental/nodejs-functions/templates/simple"
10 | },
11 | "scripts": {
12 | "test": "mocha"
13 | },
14 | "devDependencies": {
15 | "chai": "^4.2.0",
16 | "mocha": "^7.1.1",
17 | "request": "^2.88.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/experimental/vertx/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM adoptopenjdk/openjdk8-openj9 as build
2 |
3 | RUN apt-get update && \
4 | apt-get install -y maven unzip
5 |
6 | COPY . /project
7 |
8 | # Install user-app dependencies
9 | WORKDIR /project/user-app
10 | COPY ./user-app/src ./src
11 | COPY ./user-app/pom.xml ./
12 | RUN mvn -B clean package
13 |
14 | FROM adoptopenjdk:8-jre-openj9
15 |
16 | WORKDIR /work/
17 | COPY --from=build /project/user-app/target/*.jar /work/
18 |
19 | RUN chmod 775 /work
20 | EXPOSE 8080
21 | ENTRYPOINT ["sh", "-c"]
22 | CMD ["exec java -jar /work/*.jar"]
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/simple/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-express-simple",
3 | "version": "1.0.0",
4 | "description": "Simple Node.js Express application",
5 | "license": "Apache-2.0",
6 | "main": "app.js",
7 | "repository": {
8 | "type": "git",
9 | "url": "https://github.com/appsody/stacks.git",
10 | "directory": "incubator/nodejs-express/templates/simple"
11 | },
12 | "scripts": {
13 | "test": "mocha"
14 | },
15 | "devDependencies": {
16 | "chai": "^4.2.0",
17 | "mocha": "^7.1.1",
18 | "request": "^2.88.0"
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/samples/sample-stack/stack.yaml:
--------------------------------------------------------------------------------
1 | name: sample stack # title or short name for the stack (used on the website)
2 | version: 0.1.0 # version of the stack
3 | description: sample stack to help creation of more appsody stacks # short description of this stack (used on the website and `list` command)
4 | license: Apache-2.0 # license for the stack (SPDX license id)
5 | language: java # language used for this stack
6 | maintainers: # list of maintainers for this stack
7 | - name: First Middle Last
8 | email: name@email.com
9 | github-id: github-account
10 | default-template: hello # folder name of default template
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | # Configure the Kafka sink (we write to it)
2 | mp.messaging.outgoing.generated-price.connector=smallrye-kafka
3 | mp.messaging.outgoing.generated-price.topic=prices
4 | mp.messaging.outgoing.generated-price.value.serializer=org.apache.kafka.common.serialization.IntegerSerializer
5 |
6 | # Configure the Kafka source (we read from it)
7 | mp.messaging.incoming.prices.connector=smallrye-kafka
8 | mp.messaging.incoming.prices.topic=prices
9 | mp.messaging.incoming.prices.value.deserializer=org.apache.kafka.common.serialization.IntegerDeserializer
10 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/util/RangeIncludesVersion.java:
--------------------------------------------------------------------------------
1 | import org.osgi.framework.VersionRange;
2 | import org.osgi.framework.Version;
3 |
4 | public class RangeIncludesVersion {
5 |
6 | public static void main(String[] args) {
7 | if ( args.length < 2 ) {
8 | System.out.println("Must specify range and version");
9 | System.exit(1);
10 | }
11 | String range = args[0];
12 | String version = args[1];
13 |
14 | boolean result = VersionRange.valueOf(range).includes(Version.valueOf(version));
15 | System.exit( result ? 0 : 1 );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/project/util/RangeIncludesVersion.java:
--------------------------------------------------------------------------------
1 | import org.osgi.framework.VersionRange;
2 | import org.osgi.framework.Version;
3 |
4 | public class RangeIncludesVersion {
5 |
6 | public static void main(String[] args) {
7 | if ( args.length < 2 ) {
8 | System.out.println("Must specify range and version");
9 | System.exit(1);
10 | }
11 | String range = args[0];
12 | String version = args[1];
13 |
14 | boolean result = VersionRange.valueOf(range).includes(Version.valueOf(version));
15 | System.exit( result ? 0 : 1 );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/project/util/RangeIncludesVersion.java:
--------------------------------------------------------------------------------
1 | import org.osgi.framework.VersionRange;
2 | import org.osgi.framework.Version;
3 |
4 | public class RangeIncludesVersion {
5 |
6 | public static void main(String[] args) {
7 | if ( args.length < 2 ) {
8 | System.out.println("Must specify range and version");
9 | System.exit(1);
10 | }
11 | String range = args[0];
12 | String version = args[1];
13 |
14 | boolean result = VersionRange.valueOf(range).includes(Version.valueOf(version));
15 | System.exit( result ? 0 : 1 );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/server/bin/src/main.rs:
--------------------------------------------------------------------------------
1 | use std::env;
2 | use async_std::task;
3 | use application;
4 |
5 | fn main() -> Result<(), std::io::Error> {
6 |
7 | let port = env::var("PORT").unwrap_or_else(|_| "8000".to_string());
8 | let address = format!("0.0.0.0:{}", port);
9 | task::block_on(async {
10 | tide::log::start();
11 | let mut app = tide::new();
12 | app.at("/").nest({
13 | application::app()
14 | });
15 | println!(" Running server on: http://localhost:{}/", port);
16 | app.listen(address).await?;
17 | Ok(())
18 | })
19 | }
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/project/util/RangeIncludesVersion.java:
--------------------------------------------------------------------------------
1 | import org.osgi.framework.VersionRange;
2 | import org.osgi.framework.Version;
3 |
4 | public class RangeIncludesVersion {
5 |
6 | public static void main(String[] args) {
7 | if ( args.length < 2 ) {
8 | System.out.println("Must specify range and version");
9 | System.exit(1);
10 | }
11 | String range = args[0];
12 | String version = args[1];
13 |
14 | boolean result = VersionRange.valueOf(range).includes(Version.valueOf(version));
15 | System.exit( result ? 0 : 1 );
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/experimental/go-modules/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM golang:1.12
2 |
3 | ENV APPSODY_MOUNTS=/:/project/user-app
4 |
5 | ENV APPSODY_WATCH_DIR=/project/user-app
6 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/vendor
7 | ENV APPSODY_WATCH_REGEX="^.*.(go|mod)$"
8 |
9 | ENV APPSODY_RUN="go run ."
10 | ENV APPSODY_RUN_ON_CHANGE="go run ."
11 | ENV APPSODY_RUN_KILL=false
12 |
13 |
14 | ENV APPSODY_TEST="go test ./..."
15 | ENV APPSODY_TEST_KILL=false
16 |
17 | COPY ./LICENSE /licenses/
18 | COPY ./project /project
19 | COPY ./config /config
20 |
21 | WORKDIR /project/user-app
22 |
23 | ENV PORT=3000
24 |
25 | EXPOSE 3000
26 | EXPOSE 9229
27 |
28 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-express-scaffold",
3 | "version": "1.0.0",
4 | "description": "Scaffolded Node.js Express application",
5 | "license": "Apache-2.0",
6 | "main": "app.js",
7 | "repository": {
8 | "type": "git",
9 | "url": "https://github.com/appsody/stacks.git",
10 | "directory": "incubator/nodejs-express/templates/scaffold"
11 | },
12 | "scripts": {
13 | "test": "mocha"
14 | },
15 | "dependencies": {
16 | "pug": "^2.0.3"
17 | },
18 | "devDependencies": {
19 | "chai": "^4.2.0",
20 | "mocha": "^7.1.1",
21 | "request": "^2.88.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/src/main/liberty/config/server.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | springBoot-2.0
4 | servlet-4.0
5 |
6 |
7 |
8 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/ci/nginx/Dockerfile:
--------------------------------------------------------------------------------
1 | ARG NGINX_IMAGE=nginx:stable-alpine
2 | FROM $NGINX_IMAGE
3 |
4 | COPY nginx/nginx.conf /etc/nginx/nginx.conf
5 | COPY nginx/nginx-ssl.conf /etc/nginx/nginx-ssl.conf
6 | COPY nginx/startup.sh /opt/startup.sh
7 | COPY build/prefetch /opt/www/public
8 | COPY assets /opt/www/public
9 | COPY build/index-src /opt/www/public
10 |
11 | EXPOSE 8080
12 | EXPOSE 8443
13 |
14 | RUN touch /var/run/nginx.pid && \
15 | chown -R nginx:0 /var/run/nginx.pid /var/cache/nginx /opt/www/public /etc/nginx /run && \
16 | chmod -R g=u /opt/www/public /var/cache/nginx /etc/nginx /var/run/nginx.pid /run
17 |
18 | USER nginx
19 |
20 | ENTRYPOINT ["/opt/startup.sh"]
21 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | livenessProbe:
19 | failureThreshold: 12
20 | httpGet:
21 | path: /health
22 | port: APPSODY_PORT
23 | initialDelaySeconds: 5
24 | periodSeconds: 2
25 | expose: true
--------------------------------------------------------------------------------
/experimental/rocket/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | livenessProbe:
19 | failureThreshold: 12
20 | httpGet:
21 | path: /health
22 | port: APPSODY_PORT
23 | initialDelaySeconds: 5
24 | periodSeconds: 2
25 | expose: true
26 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Sources/AppsodyKitura/Routes/HealthRoutes.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is supplied by the appsody/kitura base image. DO NOT MODIFY.
3 | */
4 |
5 | import Health
6 | import Kitura
7 |
8 | public let health = Health()
9 |
10 | func initializeHealthRoutes(router: Router) {
11 |
12 | router.get(AppsodyKitura.livenessPath) { (respondWith: (Status?, RequestError?) -> Void) -> Void in
13 | if health.status.state == .UP {
14 | respondWith(health.status, nil)
15 | } else {
16 | respondWith(nil, RequestError(.serviceUnavailable, body: health.status))
17 | }
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 | ---
8 |
9 | **Is your feature request related to a problem? Please describe.**
10 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
11 |
12 | **Describe the solution you'd like**
13 | A clear and concise description of what you want to happen.
14 |
15 | **Describe alternatives you've considered**
16 | A clear and concise description of any alternative solutions or features you've considered.
17 |
18 | **Additional context**
19 | Add any other context or screenshots about the feature request here.
20 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/image/project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-functions",
3 | "version": "0.2.0",
4 | "description": "Node.js Functions Stack",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/appsody/stacks.git",
9 | "directory": "experimental/nodejs-functions/image/project"
10 | },
11 | "main": "server.js",
12 | "scripts": {
13 | "debug": "node --inspect=0.0.0.0 server.js",
14 | "start": "node server.js",
15 | "test": "mocha"
16 | },
17 | "dependencies": {
18 | "express": "~4.16.0"
19 | },
20 | "devDependencies": {
21 | "chai": "^4.2.0",
22 | "mocha": "^7.1.1",
23 | "request": "^2.88.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/mvn-stack-settings.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
13 | /mvn/repository
14 |
15 |
16 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/mvn-stack-settings.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
13 | /mvn/repository
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: generic
2 |
3 | go:
4 | - 1.12.x
5 |
6 | os: linux
7 | dist: bionic
8 |
9 | services:
10 | - docker
11 |
12 | # Delete git repo setup from travis
13 | # and replace with git clone to master.
14 | # reset hard to $TRAVIS_COMMIT
15 | install:
16 | - . ./ci/git_setup.sh
17 |
18 | before_script:
19 | - ./ci/download_cli.sh
20 |
21 | script:
22 | - . ./ci/build.sh
23 |
24 | # note before_deploy will run before each deploy provider
25 | before_deploy:
26 | - . ./ci/release.sh
27 |
28 | deploy:
29 | provider: releases
30 | skip_cleanup: true
31 | api_key: $GITHUB_TOKEN
32 | file: ci/release/*
33 | file_glob: true
34 | on:
35 | tags: true
36 | repo: appsody/stacks
37 | branch: master
38 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/__tests__/acceptance/ping.controller.acceptance.ts:
--------------------------------------------------------------------------------
1 | import {Client, expect} from '@loopback/testlab';
2 | import {DemoApplication} from '../..';
3 | import {setupApplication} from './test-helper';
4 |
5 | describe('PingController', () => {
6 | let app: DemoApplication;
7 | let client: Client;
8 |
9 | before('setupApplication', async () => {
10 | ({app, client} = await setupApplication());
11 | });
12 |
13 | after(async () => {
14 | await app.stop();
15 | });
16 |
17 | it('invokes GET /ping', async () => {
18 | const res = await client.get('/ping?msg=world').expect(200);
19 | expect(res.body).to.containEql({greeting: 'Hello from LoopBack'});
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/ci/nginx/startup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | CONF_FILE=
4 | if echo $EXTERNAL_URL | grep https
5 | then
6 | CONF_FILE="-c nginx-ssl.conf"
7 | fi
8 |
9 | # Replace the resource paths in index yaml files to match the specified external URL
10 | find /opt/www/public -name '*.yaml' -exec sed -i -e "s|{{EXTERNAL_URL}}|${EXTERNAL_URL%/}|" {} \;
11 |
12 | # Replace the resource paths in index json files to match the specified external URL
13 | find /opt/www/public -name '*.json' -exec sed -i -e "s|{{EXTERNAL_URL}}|${EXTERNAL_URL%/}|" {} \;
14 |
15 | if [ -z "${DRY_RUN}" ]
16 | then
17 | exec nginx $CONF_FILE
18 | else
19 | echo "Dry run"
20 | echo using $CONF_FILE
21 | echo user id is $(id -u)
22 | echo group id is $(id -g)
23 | fi
24 |
--------------------------------------------------------------------------------
/experimental/vertx/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 0.1.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | readinessProbe:
14 | failureThreshold: 12
15 | httpGet:
16 | path: /health
17 | port: APPSODY_PORT
18 | initialDelaySeconds: 5
19 | periodSeconds: 2
20 | timeoutSeconds: 1
21 | livenessProbe:
22 | failureThreshold: 12
23 | httpGet:
24 | path: /health
25 | port: APPSODY_PORT
26 | initialDelaySeconds: 5
27 | periodSeconds: 2
28 | expose: true
29 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/src/__tests__/acceptance/ping.controller.acceptance.ts:
--------------------------------------------------------------------------------
1 | import {Client, expect} from '@loopback/testlab';
2 | import {BootableRestApplication} from '../..';
3 | import {setupApplication} from './test-helper';
4 |
5 | describe('PingController', () => {
6 | let app: BootableRestApplication;
7 | let client: Client;
8 |
9 | before('setupApplication', async () => {
10 | ({app, client} = await setupApplication());
11 | });
12 |
13 | after(async () => {
14 | await app.stop();
15 | });
16 |
17 | it('invokes GET /ping', async () => {
18 | const res = await client.get('/ping?msg=world').expect(200);
19 | expect(res.body).to.containEql({greeting: 'Hello from LoopBack'});
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/Sources/Application/Application.swift:
--------------------------------------------------------------------------------
1 | import AppsodyKitura
2 | import Configuration
3 | import Kitura
4 |
5 | public let projectPath = ConfigurationManager.BasePath.project.path
6 |
7 | public class App {
8 | let router: Router
9 | let manager: ConfigurationManager
10 |
11 | public init() {
12 | self.router = AppsodyKitura.createRouter()
13 | self.manager = AppsodyKitura.manager
14 | }
15 |
16 | public func setUpRoutes() {
17 | router.get("/hello") { request, response, next in
18 | response.send("Hello, World!")
19 | next()
20 | }
21 | }
22 |
23 | public func run() {
24 | AppsodyKitura.run(self.router)
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | readinessProbe:
14 | failureThreshold: 12
15 | httpGet:
16 | path: /ready
17 | port: APPSODY_PORT
18 | initialDelaySeconds: 5
19 | periodSeconds: 2
20 | timeoutSeconds: 1
21 | livenessProbe:
22 | failureThreshold: 12
23 | httpGet:
24 | path: /live
25 | port: APPSODY_PORT
26 | initialDelaySeconds: 5
27 | periodSeconds: 2
28 | expose: true
29 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/migrate.ts:
--------------------------------------------------------------------------------
1 | import {DemoApplication} from './application';
2 |
3 | export async function migrate(args: string[]) {
4 | const existingSchema = args.includes('--rebuild') ? 'drop' : 'alter';
5 | console.log('Migrating schemas (%s existing schema)', existingSchema);
6 |
7 | const app = new DemoApplication();
8 | await app.boot();
9 | await app.migrateSchema({existingSchema});
10 |
11 | // Connectors usually keep a pool of opened connections,
12 | // this keeps the process running even after all work is done.
13 | // We need to exit explicitly.
14 | process.exit(0);
15 | }
16 |
17 | migrate(process.argv).catch(err => {
18 | console.error('Cannot migrate database schema', err);
19 | process.exit(1);
20 | });
21 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/java/application/KafkaConsumer.java:
--------------------------------------------------------------------------------
1 | package application;
2 |
3 | import org.springframework.kafka.annotation.KafkaListener;
4 | import org.springframework.stereotype.Service;
5 |
6 | import java.util.concurrent.CountDownLatch;
7 |
8 | // a simple kafka consumer
9 | @Service
10 | public class KafkaConsumer {
11 | private final CountDownLatch countDownLatch = new CountDownLatch(1);
12 |
13 | @KafkaListener(topics = "orders", groupId = "orders-service")
14 | public void receiveString(String message) {
15 | System.out.println("Receiving message = " + message);
16 | countDownLatch.countDown();
17 | }
18 |
19 | public CountDownLatch getCountDownLatch() {
20 | return countDownLatch;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/openapi-spec.ts:
--------------------------------------------------------------------------------
1 | import {ApplicationConfig} from '@loopback/core';
2 | import {DemoApplication} from './application';
3 |
4 | /**
5 | * Export the OpenAPI spec from the application
6 | */
7 | async function exportOpenApiSpec(): Promise {
8 | const config: ApplicationConfig = {
9 | rest: {
10 | port: +(process.env.PORT ?? 3000),
11 | host: process.env.HOST ?? 'localhost',
12 | },
13 | };
14 | const outFile = process.argv[2] ?? '';
15 | const app = new DemoApplication(config);
16 | await app.boot();
17 | await app.exportOpenApiSpec(outFile);
18 | }
19 |
20 | exportOpenApiSpec().catch(err => {
21 | console.error('Fail to export OpenAPI spec from the application.', err);
22 | process.exit(1);
23 | });
24 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/src/main/java/org/acme/quickstart/GreetingResource.java:
--------------------------------------------------------------------------------
1 | package org.acme.quickstart;
2 |
3 | import javax.inject.Inject;
4 | import javax.ws.rs.GET;
5 | import javax.ws.rs.Path;
6 | import javax.ws.rs.Produces;
7 | import javax.ws.rs.core.MediaType;
8 |
9 | import org.jboss.resteasy.annotations.jaxrs.PathParam;
10 |
11 | @Path("/hello")
12 | public class GreetingResource {
13 |
14 | @Inject
15 | GreetingService service;
16 |
17 | @GET
18 | @Produces(MediaType.TEXT_PLAIN)
19 | @Path("/greeting/{name}")
20 | public String greeting(@PathParam String name) {
21 | return service.greeting(name);
22 | }
23 |
24 | @GET
25 | @Produces(MediaType.TEXT_PLAIN)
26 | public String hello() {
27 | return "hello";
28 | }
29 | }
--------------------------------------------------------------------------------
/ci/nginx/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '2'
2 | services:
3 | index:
4 | build:
5 | context: ..
6 | dockerfile: nginx/Dockerfile
7 | image: "appsody/appsody-index"
8 | container_name: "appsody-index"
9 | ports:
10 | - "8008:8080"
11 | - "8003:8443"
12 | environment:
13 | - EXTERNAL_URL=http://localhost:8008/
14 |
15 | verify:
16 | image: "appsody/appsody-index"
17 | container_name: "appsody-verify"
18 | entrypoint: ""
19 | command: sh -c "/opt/startup.sh; cat /opt/www/public/*.yaml; cat /opt/www/public/*.json; ls /opt/www/public"
20 | environment:
21 | - EXTERNAL_URL=https://localhost:8003/
22 | - DRY_RUN=true
23 |
24 | registry:
25 | image: "registry:2"
26 | container_name: "registry"
27 | ports:
28 | - "5000:5000"
29 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: openliberty.io/v1beta1
2 | kind: OpenLibertyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | service:
10 | type: NodePort
11 | port: APPSODY_PORT
12 | annotations:
13 | prometheus.io/scrape: 'true'
14 | readinessProbe:
15 | failureThreshold: 12
16 | httpGet:
17 | path: /health/ready
18 | port: APPSODY_PORT
19 | initialDelaySeconds: 5
20 | periodSeconds: 2
21 | timeoutSeconds: 1
22 | livenessProbe:
23 | failureThreshold: 12
24 | httpGet:
25 | path: /health/live
26 | port: APPSODY_PORT
27 | initialDelaySeconds: 5
28 | periodSeconds: 2
29 | expose: true
30 |
--------------------------------------------------------------------------------
/ci/ext/pre_env.d/10_travis:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [ "$TRAVIS" == "true" ]
4 | then
5 | echo "Setting Travis environment"
6 |
7 | export GIT_BRANCH=${TRAVIS_BRANCH}
8 | export GIT_ORG_REPO=${TRAVIS_REPO_SLUG}
9 | export INDEX_VERSION=${TRAVIS_BUILD_NUMBER}
10 |
11 | # Either enable or customize how long-running tasks are watched
12 | export CI_WAIT_FOR="true"
13 | # export CI_WAIT_FOR="$script_dir/ci_wait.sh --interval 3 --limit 30"
14 |
15 | # Trim all output to ensure max log length is not exceeded
16 | export VERBOSE=false
17 |
18 | if [ $TRAVIS_TAG ] && [ "$TRAVIS_TAG" == "$TRAVIS_BRANCH" ]
19 | then
20 | echo "This is a release build for $TRAVIS_TAG"
21 | IMAGE_REGISTRY_PUBLISH=true
22 | else
23 | IMAGE_REGISTRY_PUBLISH=false
24 | fi
25 | fi
26 |
--------------------------------------------------------------------------------
/incubator/node-red/image/project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node-red-stack",
3 | "version": "0.1.2",
4 | "description": "Node-RED Stack",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/appsody/stacks.git",
9 | "directory": "incubator/nodejs-express/image/project"
10 | },
11 | "scripts": {
12 | "debug": "node --inspect=0.0.0.0 server.js",
13 | "start": "node server.js",
14 | "test": "mocha"
15 | },
16 | "dependencies": {
17 | "@cloudnative/health-connect": "^2.0.0",
18 | "express": "~4.16.0",
19 | "node-red": "1.x",
20 | "prom-client": "^12.0.0"
21 | },
22 | "devDependencies": {
23 | "appmetrics-dash": "^5.0.0",
24 | "chai": "^4.2.0",
25 | "mocha": "^7.1.1",
26 | "request": "^2.88.0"
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Eclipse MicroProfile®
2 | version: 0.2.27
3 | description: Eclipse MicroProfile on Open Liberty & OpenJ9 using Maven
4 | license: Apache-2.0
5 | language: java
6 | maintainers:
7 | - name: Mike Andrasak
8 | email: andrasak@us.ibm.com
9 | github-id: uberskigeek
10 | - name: Andy Mauer
11 | email: ajmauer@us.ibm.com
12 | github-id: ajm01
13 | - name: Scott Kurz
14 | email: skurz@us.ibm.com
15 | github-id: scottkurz
16 | - name: Adam Wisniewski
17 | email: awisniew@us.ibm.com
18 | github-id: awisniew90
19 | default-template: default
20 | requirements:
21 | appsody-version: ">= 0.5.0"
22 | templating-data:
23 | libertyversion: '19.0.0.12'
24 | deprecated: 04/20/2020 - This stack has been replaced by the Open Liberty stack (java-openliberty)
25 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | readinessProbe:
16 | failureThreshold: 12
17 | httpGet:
18 | path: /health/ready
19 | port: APPSODY_PORT
20 | initialDelaySeconds: 5
21 | periodSeconds: 2
22 | timeoutSeconds: 1
23 | livenessProbe:
24 | failureThreshold: 12
25 | httpGet:
26 | path: /health/live
27 | port: APPSODY_PORT
28 | initialDelaySeconds: 5
29 | periodSeconds: 2
30 | expose: true
31 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/scaffold/test/test.js:
--------------------------------------------------------------------------------
1 | var expect = require('chai').expect;
2 | var request = require('request');
3 |
4 | // Start the server before testing
5 | const server = require('../../server').server;
6 | const PORT = require('../../server').PORT;
7 | const url = 'http://localhost:' + PORT;
8 |
9 | // Testing / endpoint, should return 200
10 | describe('Node.js Express Scaffold template', function () {
11 | describe('/ endpoint', function () {
12 | it('status', function (done) {
13 | request(url + '/', function (error, response, body) {
14 | expect(response.statusCode).to.equal(200);
15 | done();
16 | });
17 | });
18 | });
19 | });
20 |
21 | // Stop the server after testing
22 | after(done => {
23 | server.close(done);
24 | });
25 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/simple/test/test.js:
--------------------------------------------------------------------------------
1 | var expect = require('chai').expect;
2 | var request = require('request');
3 |
4 | // Start the server before testing
5 | const server = require('../../server').server;
6 | const PORT = require('../../server').PORT;
7 | const url = 'http://localhost:' + PORT;
8 |
9 | describe('Node.js Express Simple template', function () {
10 | // Testing / endpoint, should return 200
11 | describe('/ endpoint', function () {
12 | it('status', function (done) {
13 | request(url + '/', function (error, response, body) {
14 | expect(response.statusCode).to.equal(200);
15 | done();
16 | });
17 | });
18 | });
19 | });
20 |
21 | // Stop the server after testing
22 | after(done => {
23 | server.close(done);
24 | });
25 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/java/dev/appsody/starter/health/StarterLivenessCheck.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter.health;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | import org.eclipse.microprofile.health.HealthCheck;
6 | import org.eclipse.microprofile.health.HealthCheckResponse;
7 | import org.eclipse.microprofile.health.Liveness;
8 |
9 | @Liveness
10 | @ApplicationScoped
11 | public class StarterLivenessCheck implements HealthCheck {
12 |
13 | private boolean isAlive() {
14 | // perform health checks here
15 |
16 | return true;
17 | }
18 |
19 | @Override
20 | public HealthCheckResponse call() {
21 | boolean up = isAlive();
22 | return HealthCheckResponse.named(this.getClass().getSimpleName()).state(up).build();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/java/dev/appsody/starter/health/StarterLivenessCheck.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter.health;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | import org.eclipse.microprofile.health.HealthCheck;
6 | import org.eclipse.microprofile.health.HealthCheckResponse;
7 | import org.eclipse.microprofile.health.Liveness;
8 |
9 | @Liveness
10 | @ApplicationScoped
11 | public class StarterLivenessCheck implements HealthCheck {
12 |
13 | private boolean isAlive() {
14 | // perform health checks here
15 |
16 | return true;
17 | }
18 |
19 | @Override
20 | public HealthCheckResponse call() {
21 | boolean up = isAlive();
22 | return HealthCheckResponse.named(this.getClass().getSimpleName()).state(up).build();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [ -n "$TERM" ] && [ "$TERM" != "dumb" ] && [ -x /usr/bin/tput ] && [[ `tput colors` != "0" ]]; then
4 | color_prompt="yes"
5 | else
6 | color_prompt=
7 | fi
8 |
9 | if [[ "$color_prompt" == "yes" ]]; then
10 | BLUE="\033[0;34m"
11 | NO_COLOR="\033[0m"
12 | else
13 | BLUE=""
14 | NO_COLOUR=""
15 | fi
16 |
17 | if [ ! -d ~/.m2/repository ]; then
18 | echo -e "${BLUE}Creating local maven repository: ~/.m2/repository${NO_COLOR}"
19 | mkdir -p ~/.m2/repository
20 | fi
21 |
22 | which java 2>&1 >/dev/null ; JAVA_KNOWN=$?
23 | if [ ! -z "$JAVA_HOME" ] || [ $JAVA_KNOWN = "0" ]; then
24 | ./mvnw install -Denforcer.skip=true
25 | fi
26 |
27 | # copy the maven wrapper from the stack to extracted application directory
28 | cp -Rp mvnw* ..
29 | cp -Rp .mvn ..
30 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/project/.appsody-init.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | if [ -n "$TERM" ] && [ "$TERM" != "dumb" ] && [ -x /usr/bin/tput ] && [[ `tput colors` != "0" ]]; then
3 | color_prompt="yes"
4 | else
5 | color_prompt=
6 | fi
7 |
8 | if [[ "$color_prompt" == "yes" ]]; then
9 | BLUE="\033[0;34m"
10 | NO_COLOR="\033[0m"
11 | else
12 | BLUE=""
13 | NO_COLOUR=""
14 | fi
15 |
16 | if [ ! -d ~/.m2/repository ]; then
17 | echo -e "${BLUE}Creating local maven repository: ~/.m2/repository${NO_COLOR}"
18 | mkdir -p ~/.m2/repository
19 | fi
20 |
21 | which java 2>&1 >/dev/null ; JAVA_KNOWN=$?
22 | if [ ! -z "$JAVA_HOME" ] || [ $JAVA_KNOWN = "0" ]; then
23 | ./mvnw install -q -f ./{{.stack.parentpomfilename}}
24 | fi
25 |
26 | # copy the maven wrapper from the stack to extracted application directory
27 | cp -Rp mvnw* ..
28 | cp -Rp .mvn ..
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/src/__tests__/acceptance/test-helper.ts:
--------------------------------------------------------------------------------
1 | import {main, BootableRestApplication} from '../..';
2 | import {
3 | createRestAppClient,
4 | givenHttpServerConfig,
5 | Client,
6 | } from '@loopback/testlab';
7 |
8 | export async function setupApplication(): Promise {
9 | const restConfig = givenHttpServerConfig({
10 | // Customize the server configuration here.
11 | // Empty values (undefined, '') will be ignored by the helper.
12 | //
13 | // host: process.env.HOST,
14 | // port: +process.env.PORT,
15 | });
16 |
17 | const app = await main({
18 | rest: restConfig,
19 | });
20 |
21 | const client = createRestAppClient(app);
22 |
23 | return {app, client};
24 | }
25 |
26 | export interface AppWithClient {
27 | app: BootableRestApplication;
28 | client: Client;
29 | }
30 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Open Liberty
2 | version: 0.2.20
3 | description: Eclipse MicroProfile & Jakarta EE on Open Liberty & OpenJ9 using Maven
4 | license: Apache-2.0
5 | language: java
6 | maintainers:
7 | - name: Mike Andrasak
8 | email: andrasak@us.ibm.com
9 | github-id: uberskigeek
10 | - name: Andy Mauer
11 | email: ajmauer@us.ibm.com
12 | github-id: ajm01
13 | - name: Scott Kurz
14 | email: skurz@us.ibm.com
15 | github-id: scottkurz
16 | - name: Adam Wisniewski
17 | email: awisniew@us.ibm.com
18 | github-id: awisniew90
19 | default-template: default
20 | requirements:
21 | docker-version: ">= 17.09.0"
22 | appsody-version: ">= 0.5.0"
23 | templating-data:
24 | libertyversion: "20.0.0.9"
25 | parentpomgroup: "dev.appsody"
26 | parentpomid: "java-openliberty"
27 | parentpomrange: "[0.2, 0.3)"
28 |
--------------------------------------------------------------------------------
/experimental/rust/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // You will need to install the CodeLLDB plugin to use this launch config
2 | {
3 | "version": "0.2.0",
4 | "configurations": [
5 | {
6 | "name": "Remote Debug",
7 | "type": "lldb",
8 | "request": "custom",
9 | "initCommands": [
10 | "platform select remote-linux",
11 | "platform connect connect://localhost:1234",
12 | "platform settings -w /project/user-app/target/x86_64-unknown-linux-musl/debug"
13 | ],
14 | "targetCreateCommands": [
15 | "file rust-simple"
16 | ],
17 | "processCreateCommands": [
18 | "run"
19 | ],
20 | "sourceMap": { "/project/user-app" : "${workspaceFolder}" }
21 | }
22 | ]
23 | }
--------------------------------------------------------------------------------
/incubator/java-openliberty/templates/default/src/main/java/dev/appsody/starter/health/StarterReadinessCheck.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter.health;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | import org.eclipse.microprofile.health.HealthCheck;
6 | import org.eclipse.microprofile.health.HealthCheckResponse;
7 | import org.eclipse.microprofile.health.Readiness;
8 |
9 | @Readiness
10 | @ApplicationScoped
11 | public class StarterReadinessCheck implements HealthCheck {
12 |
13 | private boolean isReady() {
14 | // perform readiness checks, e.g. database connection, etc.
15 |
16 | return true;
17 | }
18 |
19 | @Override
20 | public HealthCheckResponse call() {
21 | boolean up = isReady();
22 | return HealthCheckResponse.named(this.getClass().getSimpleName()).state(up).build();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | prometheus.io/path: '/actuator/prometheus'
16 | readinessProbe:
17 | failureThreshold: 12
18 | httpGet:
19 | path: /actuator/health
20 | port: APPSODY_PORT
21 | initialDelaySeconds: 5
22 | periodSeconds: 2
23 | livenessProbe:
24 | failureThreshold: 12
25 | httpGet:
26 | path: /actuator/liveness
27 | port: APPSODY_PORT
28 | initialDelaySeconds: 5
29 | periodSeconds: 2
30 | expose: true
31 |
--------------------------------------------------------------------------------
/incubator/java-microprofile/templates/default/src/main/java/dev/appsody/starter/health/StarterReadinessCheck.java:
--------------------------------------------------------------------------------
1 | package dev.appsody.starter.health;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | import org.eclipse.microprofile.health.HealthCheck;
6 | import org.eclipse.microprofile.health.HealthCheckResponse;
7 | import org.eclipse.microprofile.health.Readiness;
8 |
9 | @Readiness
10 | @ApplicationScoped
11 | public class StarterReadinessCheck implements HealthCheck {
12 |
13 | private boolean isReady() {
14 | // perform readiness checks, e.g. database connection, etc.
15 |
16 | return true;
17 | }
18 |
19 | @Override
20 | public HealthCheckResponse call() {
21 | boolean up = isReady();
22 | return HealthCheckResponse.named(this.getClass().getSimpleName()).state(up).build();
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/incubator/node-red/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM node:12
2 |
3 | ENV APPSODY_MOUNTS=/:/project/user-app
4 | ENV APPSODY_DEPS=/project/user-app/node_modules
5 |
6 | ENV APPSODY_WATCH_DIR=/project/user-app
7 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/node_modules
8 | ENV APPSODY_WATCH_REGEX="^.*.json$"
9 |
10 | ENV APPSODY_INSTALL="npm install --prefix user-app"
11 |
12 | ENV APPSODY_RUN="npm start"
13 | ENV APPSODY_RUN_ON_CHANGE="npm start"
14 | ENV APPSODY_RUN_KILL=true
15 |
16 | ENV APPSODY_DEBUG="npm run debug"
17 | ENV APPSODY_DEBUG_ON_CHANGE="npm run debug"
18 | ENV APPSODY_DEBUG_KILL=true
19 |
20 | ENV APPSODY_TEST="npm test"
21 |
22 | COPY ./LICENSE /licenses/
23 | COPY ./project /project
24 | COPY ./config /config
25 | WORKDIR /project
26 | RUN npm install
27 |
28 | ENV PORT=3000
29 | ENV NODE_PATH=/project/user-app/node_modules
30 |
31 | EXPOSE 3000
32 | EXPOSE 9229
33 |
--------------------------------------------------------------------------------
/incubator/node-red/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | readinessProbe:
19 | failureThreshold: 12
20 | httpGet:
21 | path: /ready
22 | port: APPSODY_PORT
23 | initialDelaySeconds: 5
24 | periodSeconds: 2
25 | timeoutSeconds: 1
26 | livenessProbe:
27 | failureThreshold: 12
28 | httpGet:
29 | path: /live
30 | port: APPSODY_PORT
31 | initialDelaySeconds: 5
32 | periodSeconds: 2
33 | expose: true
34 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | readinessProbe:
19 | failureThreshold: 12
20 | httpGet:
21 | path: /ready
22 | port: APPSODY_PORT
23 | initialDelaySeconds: 5
24 | periodSeconds: 2
25 | timeoutSeconds: 1
26 | livenessProbe:
27 | failureThreshold: 12
28 | httpGet:
29 | path: /live
30 | port: APPSODY_PORT
31 | initialDelaySeconds: 5
32 | periodSeconds: 2
33 | expose: true
34 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | // See https://go.microsoft.com/fwlink/?LinkId=733558
3 | // for the documentation about the tasks.json format
4 | "version": "2.0.0",
5 | "tasks": [
6 | {
7 | "label": "Watch and Compile Project",
8 | "type": "shell",
9 | "command": "npm",
10 | "args": ["--silent", "run", "build:watch"],
11 | "group": {
12 | "kind": "build",
13 | "isDefault": true
14 | },
15 | "problemMatcher": "$tsc-watch"
16 | },
17 | {
18 | "label": "Build, Test and Lint",
19 | "type": "shell",
20 | "command": "npm",
21 | "args": ["--silent", "run", "test:dev"],
22 | "group": {
23 | "kind": "test",
24 | "isDefault": true
25 | },
26 | "problemMatcher": ["$tsc", "$eslint-compact", "$eslint-stylish"]
27 | }
28 | ]
29 | }
30 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | readinessProbe:
19 | failureThreshold: 12
20 | httpGet:
21 | path: /ready
22 | port: APPSODY_PORT
23 | initialDelaySeconds: 5
24 | periodSeconds: 2
25 | timeoutSeconds: 1
26 | livenessProbe:
27 | failureThreshold: 12
28 | httpGet:
29 | path: /live
30 | port: APPSODY_PORT
31 | initialDelaySeconds: 5
32 | periodSeconds: 2
33 | expose: true
34 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/image/project/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nodejs-express",
3 | "version": "0.4.10",
4 | "description": "Node.js Express Stack",
5 | "license": "Apache-2.0",
6 | "repository": {
7 | "type": "git",
8 | "url": "https://github.com/appsody/stacks.git",
9 | "directory": "incubator/nodejs-express/image/project"
10 | },
11 | "scripts": {
12 | "debug": "node --inspect=0.0.0.0 server.js",
13 | "start": "node server.js",
14 | "test": "mocha"
15 | },
16 | "dependencies": {
17 | "@cloudnative/health-connect": "^2.0.0",
18 | "express": "^4.17.1",
19 | "node-rdkafka": "^2.7.4",
20 | "pino": "^6.2.0",
21 | "pino-http": "^5.0.0",
22 | "prom-client": "^12.0.0"
23 | },
24 | "devDependencies": {
25 | "appmetrics-dash": "^5.3.0",
26 | "chai": "^4.2.0",
27 | "mocha": "^7.1.1",
28 | "request": "^2.88.0"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/__tests__/acceptance/test-helper.ts:
--------------------------------------------------------------------------------
1 | import {DemoApplication} from '../..';
2 | import {
3 | createRestAppClient,
4 | givenHttpServerConfig,
5 | Client,
6 | } from '@loopback/testlab';
7 |
8 | export async function setupApplication(): Promise {
9 | const restConfig = givenHttpServerConfig({
10 | // Customize the server configuration here.
11 | // Empty values (undefined, '') will be ignored by the helper.
12 | //
13 | // host: process.env.HOST,
14 | // port: +process.env.PORT,
15 | });
16 |
17 | const app = new DemoApplication({
18 | rest: restConfig,
19 | });
20 |
21 | await app.boot();
22 | await app.start();
23 |
24 | const client = createRestAppClient(app);
25 |
26 | return {app, client};
27 | }
28 |
29 | export interface AppWithClient {
30 | app: DemoApplication;
31 | client: Client;
32 | }
33 |
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.0
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "simple",
8 | dependencies: [
9 | // Dependencies declare other packages that this package depends on.
10 | // .package(url: /* package url */, from: "1.0.0"),
11 | ],
12 | targets: [
13 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
14 | // Targets can depend on other targets in this package, and on products in packages which this package depends on.
15 | .target(
16 | name: "simple",
17 | dependencies: []),
18 | .testTarget(
19 | name: "simpleTests",
20 | dependencies: ["simple"]),
21 | ]
22 | )
23 |
--------------------------------------------------------------------------------
/ci/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # setup environment
4 | . $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/env.sh
5 |
6 | if [ $# -gt 0 ]
7 | then
8 | # ignore the old basedir argument
9 | dir=$1
10 | if [ -d $dir ] && [ -f $dir/RELEASE.md ]
11 | then
12 | shift
13 | fi
14 | fi
15 |
16 | # Fetch previously released stacks
17 | . $script_dir/prefetch.sh
18 |
19 | # Allow multiple stacks to be selected
20 | if [ $# -gt 0 ]
21 | then
22 | export STACKS_LIST="$@"
23 | echo "STACKS_LIST=$STACKS_LIST"
24 |
25 | for stack_name in $STACKS_LIST
26 | do
27 | if [ "${stack_name: -1}" == "/" ]
28 | then
29 | stack_name=${stack_name%?}
30 | fi
31 |
32 | stack_no_slash="$stack_no_slash $stack_name"
33 | done
34 |
35 | STACKS_LIST=$stack_no_slash
36 | fi
37 |
38 | if [ -z "$STACKS_LIST" ]
39 | then
40 | . $script_dir/list.sh
41 | fi
42 |
43 | . $script_dir/package.sh
44 |
--------------------------------------------------------------------------------
/experimental/rust-tide/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "(gdb) Launch",
6 | "type": "cppdbg",
7 | "request": "launch",
8 | "program": "${workspaceFolder}/rust-tide-server",
9 | "args": [],
10 | "stopAtEntry": false,
11 | "cwd": "${workspaceFolder}",
12 | "environment": [],
13 | "externalConsole": false,
14 | "MIMode": "gdb",
15 | "miDebuggerServerAddress": "localhost:1234",
16 | "serverLaunchTimeout": 1000,
17 | "setupCommands": [
18 | {
19 | "description": "Enable pretty-printing for gdb",
20 | "text": "-enable-pretty-printing",
21 | "ignoreFailures": true
22 | }
23 | ]
24 | }
25 | ]
26 | }
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/src/__tests__/acceptance/home-page.acceptance.ts:
--------------------------------------------------------------------------------
1 | import {Client} from '@loopback/testlab';
2 | import {DemoApplication} from '../..';
3 | import {setupApplication} from './test-helper';
4 |
5 | describe('HomePage', () => {
6 | let app: DemoApplication;
7 | let client: Client;
8 |
9 | before('setupApplication', async () => {
10 | ({app, client} = await setupApplication());
11 | });
12 |
13 | after(async () => {
14 | await app.stop();
15 | });
16 |
17 | it('exposes a default home page', async () => {
18 | await client
19 | .get('/')
20 | .expect(200)
21 | .expect('Content-Type', /text\/html/);
22 | });
23 |
24 | it('exposes self-hosted explorer', async () => {
25 | await client
26 | .get('/explorer/')
27 | .expect(200)
28 | .expect('Content-Type', /text\/html/)
29 | .expect(/LoopBack API Explorer/);
30 | });
31 | });
32 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/stack.yaml:
--------------------------------------------------------------------------------
1 | name: Spring Boot®
2 | version: 0.3.30
3 | description: Spring Boot using OpenJ9 and Maven
4 | license: Apache-2.0
5 | language: java
6 | maintainers:
7 | - name: Erin Schnabel
8 | email: schnabel@us.ibm.com
9 | github-id: ebullient
10 | - name: Ozzy Osborne
11 | email: ozzy@ca.ibm.com
12 | github-id: bardweller
13 | - name: Richard Trotter
14 | email: rtrotter@us.ibm.com
15 | github-id: richard-trotter
16 | - name: Harish Yayi
17 | email: hyayi@us.ibm.com
18 | github-id: yharish991
19 | default-template: default
20 | requirements:
21 | appsody-version: ">= 0.5.0"
22 | docker-version: ">= 17.09.0"
23 | templating-data:
24 | baseimage: maven:3.6-jdk-8-openj9
25 | finalimage: adoptopenjdk/openjdk8-openj9:ubi-jre
26 | parentpomgroup: dev.appsody
27 | parentpomid: spring-boot2-stack
28 | parentpomrange: '[0.3, 0.4)'
29 | parentpomfilename: appsody-boot2-pom.xml
30 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | #enable the actuator endpoints for health, metrics, and prometheus.
2 | management.endpoints.web.exposure.include=health,metrics,prometheus,liveness
3 | opentracing.jaeger.log-spans=false
4 |
5 | spring.kafka.consumer.bootstrap-servers=${KAFKA_BOOTSTRAP_SERVERS}
6 | spring.kafka.consumer.group-id=orders-service
7 | spring.kafka.consumer.auto-offset-reset=earliest
8 | spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
9 | spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
10 |
11 | spring.kafka.producer.bootstrap-servers=${KAFKA_BOOTSTRAP_SERVERS}
12 | spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
13 | spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
14 | spring.kafka.consumer.enable-auto-commit=true
15 |
--------------------------------------------------------------------------------
/ci/git_setup.sh:
--------------------------------------------------------------------------------
1 | if [ -n "$TRAVIS_TAG" ]
2 | then
3 | if [ -z "$RELEASE_BRANCH" ]
4 | then
5 | # This environment variable can be set in the Travis settings
6 | echo "No RELEASE_BRANCH environment variable set: defaulting to master"
7 | export RELEASE_BRANCH="master"
8 | fi
9 |
10 | echo "Release branch is: $RELEASE_BRANCH"
11 |
12 | git clone --branch=$RELEASE_BRANCH https://github.com/$TRAVIS_REPO_SLUG.git $TRAVIS_BUILD_DIR/release
13 | cd $TRAVIS_BUILD_DIR/release
14 |
15 | echo "Looking for release commit in branch..."
16 | git branch --contains $TRAVIS_COMMIT
17 |
18 | if [[ $(echo $?) != "0" ]]
19 | then
20 | echo "Error: could not find release commit in release branch! Branch: $RELEASE_BRANCH , Commit: $TRAVIS_COMMIT"
21 | exit 1
22 | fi
23 |
24 | echo "Reseting branch to release commit: $TRAVIS_COMMIT"
25 | git reset --hard $TRAVIS_COMMIT
26 |
27 | # Logging the current commit
28 | git log -n 1
29 | fi
30 |
31 |
32 |
--------------------------------------------------------------------------------
/ci/release.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # setup environment
4 | . $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/env.sh
5 |
6 | # directory to store assets for test or release
7 | release_dir=$script_dir/release
8 | mkdir -p $release_dir
9 |
10 | # expose an extension point for running before main 'release' processing
11 | exec_hooks $script_dir/ext/pre_release.d
12 |
13 | # iterate over each asset
14 | for asset in $assets_dir/*
15 | do
16 | if [[ $asset != *-local.yaml ]]
17 | then
18 | echo "Releasing: $asset"
19 | mv $asset $release_dir
20 | fi
21 | done
22 |
23 | image_registry_login
24 |
25 | if [ -f $build_dir/image_list ]
26 | then
27 | while read line
28 | do
29 | if [ "$line" != "" ]
30 | then
31 | image_push $line
32 | fi
33 | done < $build_dir/image_list
34 | fi
35 |
36 | # expose an extension point for running after main 'release' processing
37 | exec_hooks $script_dir/ext/post_release.d
38 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/resources/application-test.properties:
--------------------------------------------------------------------------------
1 | # spring.embedded.kafka.brokers system property is set by Embedded Kafka server to the addresses of the bootstrap servers
2 | spring.kafka.consumer.bootstrap-servers=${spring.embedded.kafka.brokers}
3 | spring.kafka.consumer.group-id=orders-service
4 | spring.kafka.consumer.auto-offset-reset=earliest
5 | spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
6 | spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
7 |
8 | # spring.embedded.kafka.brokers system property is set by Embedded Kafka server to the addresses of the bootstrap servers
9 | spring.kafka.producer.bootstrap-servers=${spring.embedded.kafka.brokers}
10 | spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
11 | spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
12 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.rulers": [80],
3 | "editor.tabCompletion": "on",
4 | "editor.tabSize": 2,
5 | "editor.trimAutoWhitespace": true,
6 | "editor.formatOnSave": true,
7 | "editor.codeActionsOnSave": {
8 | "source.organizeImports": true,
9 | "source.fixAll.eslint": true
10 | },
11 |
12 | "files.exclude": {
13 | "**/.DS_Store": true,
14 | "**/.git": true,
15 | "**/.hg": true,
16 | "**/.svn": true,
17 | "**/CVS": true,
18 | "dist": true,
19 | },
20 | "files.insertFinalNewline": true,
21 | "files.trimTrailingWhitespace": true,
22 |
23 | "typescript.tsdk": "./node_modules/typescript/lib",
24 | "typescript.format.insertSpaceAfterOpeningAndBeforeClosingNonemptyBraces": false,
25 | "typescript.preferences.quoteStyle": "single",
26 | "eslint.run": "onSave",
27 | "eslint.nodePath": "./node_modules",
28 | "eslint.validate": [
29 | "javascript",
30 | "typescript"
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/docker-compose.yaml:
--------------------------------------------------------------------------------
1 | version: '2'
2 |
3 | services:
4 |
5 | zookeeper:
6 | image: strimzi/kafka:0.11.3-kafka-2.1.0
7 | command: [
8 | "sh", "-c",
9 | "bin/zookeeper-server-start.sh config/zookeeper.properties"
10 | ]
11 | ports:
12 | - "2181:2181"
13 | environment:
14 | LOG_DIR: /tmp/logs
15 |
16 | kafka:
17 | image: strimzi/kafka:0.11.3-kafka-2.1.0
18 | command: [
19 | "sh", "-c",
20 | "bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}"
21 | ]
22 | depends_on:
23 | - zookeeper
24 | ports:
25 | - "9092:9092"
26 | environment:
27 | LOG_DIR: "/tmp/logs"
28 | KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
29 | KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
30 | KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
31 |
--------------------------------------------------------------------------------
/incubator/swift/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Install the app dependencies
2 | FROM swift:5.2 as builder
3 |
4 | # Install OS updates
5 | RUN apt-get update \
6 | && apt-get install -y libcurl4-openssl-dev libssl-dev \
7 | && apt-get clean \
8 | && echo 'Finished installing dependencies'
9 |
10 | # Install user-app dependencies
11 | WORKDIR "/project"
12 | COPY ./user-app ./
13 |
14 | # Build project, and discover executable name
15 | RUN echo '#!/bin/bash' > run.sh \
16 | && swift build -c release | tee output.txt \
17 | && cat output.txt | awk 'END {print "./.build/x86_64-unknown-linux/release/" $NF}' >> run.sh \
18 | && chmod 755 run.sh
19 |
20 | FROM swift:5.2-slim
21 |
22 | # Install OS updates
23 | RUN apt-get update \
24 | && apt-get clean \
25 | && echo 'Finished installing dependencies'
26 |
27 | WORKDIR "/project"
28 | COPY --from=builder /project/.build /project/.build
29 | COPY --from=builder /project/run.sh /project
30 |
31 | ENV PORT 8080
32 | EXPOSE 8080
33 |
34 | CMD ["./run.sh"]
35 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/src/main/java/org/acme/kafka/PriceGenerator.java:
--------------------------------------------------------------------------------
1 | package org.acme.kafka;
2 |
3 | import java.time.Duration;
4 | import java.util.Random;
5 | import java.util.concurrent.TimeUnit;
6 |
7 | import javax.enterprise.context.ApplicationScoped;
8 |
9 | import io.smallrye.mutiny.Multi;
10 | import org.eclipse.microprofile.reactive.messaging.Outgoing;
11 |
12 | import io.reactivex.Flowable;
13 |
14 | /**
15 | * A bean producing random prices every 5 seconds.
16 | * The prices are written to a Kafka topic (prices). The Kafka configuration is specified in the application configuration.
17 | */
18 | @ApplicationScoped
19 | public class PriceGenerator {
20 |
21 | private Random random = new Random();
22 |
23 | @Outgoing("generated-price")
24 | public Multi generate() {
25 | return Multi.createFrom().ticks().every(Duration.ofSeconds(5))
26 | .onOverflow().drop()
27 | .map(tick -> random.nextInt(100));
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/incubator/kitura/templates/default/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | // This configuration requires the CodeLLDB plugin:
6 | // https://github.com/vadimcn/vscode-lldb
7 | "name": "Remote Debug",
8 | "type": "lldb",
9 | "request": "custom",
10 | "initCommands": [
11 | "platform select remote-linux",
12 | "platform connect connect://localhost:1234",
13 | "env LD_LIBRARY_PATH=/project/user-app/.build/debug"
14 | ],
15 | "targetCreateCommands": [
16 | "file .build/x86_64-unknown-linux/debug/server"
17 | ],
18 | "processCreateCommands": [
19 | "run"
20 | ],
21 | "sourceMap": { "/project/user-app" : "${workspaceFolder}" },
22 | "exitCommands": [
23 | "process kill"
24 | ]
25 | }
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/incubator/swift/templates/simple/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | // This configuration requires the CodeLLDB plugin:
6 | // https://github.com/vadimcn/vscode-lldb
7 | "name": "Remote Debug",
8 | "type": "lldb",
9 | "request": "custom",
10 | "initCommands": [
11 | "platform select remote-linux",
12 | "platform connect connect://localhost:1234",
13 | "env LD_LIBRARY_PATH=/project/user-app/.build/debug"
14 | ],
15 | "targetCreateCommands": [
16 | "file .build/x86_64-unknown-linux/debug/simple"
17 | ],
18 | "processCreateCommands": [
19 | "run"
20 | ],
21 | "sourceMap": { "/project/user-app" : "${workspaceFolder}" },
22 | "exitCommands": [
23 | "process kill"
24 | ]
25 | }
26 | ]
27 | }
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 | ---
8 |
9 | **Describe the bug**
10 | A clear and concise description of what the bug is.
11 |
12 | **To Reproduce**
13 | Steps to reproduce the behavior:
14 | 1. Go to '...'
15 | 2. Click on '....'
16 | 3. Scroll down to '....'
17 | 4. See error
18 |
19 | **Expected behavior**
20 | A clear and concise description of what you expected to happen.
21 |
22 | **Actual behaviour**
23 | What is the actual behaviour.
24 |
25 | **Environment Details (please complete the following information):**
26 | - OS: [e.g. iOS]
27 | - Browser [e.g. chrome, safari]
28 | - Version [e.g. 22]
29 |
30 | **If applicable please specify:**
31 | - CLI version:
32 | - Stack you are using (including the version):
33 |
34 | **Screenshots**
35 | If applicable, add screenshots to help explain your problem.
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/incubator/quarkus/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | ## Stage 1 : build with maven builder image with native capabilities
2 | FROM quay.io/quarkus/centos-quarkus-maven:19.3.1-java11 AS build
3 |
4 | COPY . /project
5 | RUN cd /project && mvn -B install dependency:go-offline -DskipTests
6 | # Install user-app dependencies
7 | WORKDIR /project/user-app
8 | COPY ./user-app/src ./src
9 | COPY ./user-app/pom.xml ./
10 | USER root
11 | RUN chown -R quarkus .
12 | USER quarkus
13 | RUN mvn -B -Pnative clean package
14 |
15 |
16 | ## Stage 2 : create the docker final image
17 | FROM registry.access.redhat.com/ubi8/ubi-minimal
18 |
19 | WORKDIR /work/
20 | COPY --from=build /project/user-app/target/*-runner /work/application
21 |
22 | USER root
23 | RUN microdnf -y install shadow-utils \
24 | && microdnf clean all ;\
25 | useradd -r -g 0 -s /usr/sbin/nologin quarkus
26 |
27 | RUN chown -R quarkus /work
28 | RUN chmod -R g+w /work
29 |
30 |
31 | USER quarkus
32 | EXPOSE 8080
33 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
34 |
--------------------------------------------------------------------------------
/experimental/vertx/image/project/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4.0.0
4 |
5 | dev.appsody
6 | vertx
7 | 0.1.4
8 | pom
9 |
10 |
11 | 3.8.0
12 | 1.0.20
13 | 1.8
14 | 1.8
15 | UTF-8
16 |
17 |
18 |
19 |
20 |
21 | io.vertx
22 | vertx-stack-depchain
23 | ${vertx.version}
24 | pom
25 | import
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | prometheus.io/path: '/actuator/prometheus'
16 | monitoring:
17 | labels:
18 | k8s-app: APPSODY_PROJECT_NAME
19 | endpoints:
20 | - path: '/actuator/prometheus'
21 | readinessProbe:
22 | failureThreshold: 12
23 | httpGet:
24 | path: /actuator/health
25 | port: APPSODY_PORT
26 | initialDelaySeconds: 5
27 | periodSeconds: 2
28 | timeoutSeconds: 1
29 | livenessProbe:
30 | failureThreshold: 12
31 | httpGet:
32 | path: /actuator/liveness
33 | port: APPSODY_PORT
34 | initialDelaySeconds: 5
35 | periodSeconds: 2
36 | expose: true
37 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/kafka/docker-compose.yaml:
--------------------------------------------------------------------------------
1 | version: '2'
2 | services:
3 | zookeeper:
4 | image: strimzi/kafka:0.17.0-kafka-2.4.0
5 | command: [
6 | "sh", "-c",
7 | "bin/zookeeper-server-start.sh config/zookeeper.properties"
8 | ]
9 | ports:
10 | - "2181:2181"
11 | environment:
12 | LOG_DIR: /tmp/logs
13 |
14 | kafka:
15 | image: strimzi/kafka:0.17.0-kafka-2.4.0
16 | command: [
17 | "sh", "-c",
18 | "bin/kafka-server-start.sh config/server.properties --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}"
19 | ]
20 | depends_on:
21 | - zookeeper
22 | ports:
23 | - "9092:9092"
24 | expose:
25 | - "9092"
26 | environment:
27 | LOG_DIR: "/tmp/logs"
28 | KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092
29 | KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
30 | KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
31 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/src/test/java/org/acme/quickstart/GreetingResourceTest.java:
--------------------------------------------------------------------------------
1 | package org.acme.quickstart;
2 |
3 | import static io.restassured.RestAssured.given;
4 | import static org.hamcrest.CoreMatchers.is;
5 |
6 | import java.util.UUID;
7 |
8 | import org.junit.jupiter.api.Test;
9 |
10 | import io.quarkus.test.junit.QuarkusTest;
11 |
12 | @QuarkusTest
13 | public class GreetingResourceTest {
14 |
15 | @Test
16 | public void testHelloEndpoint() {
17 | given()
18 | .when().get("/hello")
19 | .then()
20 | .statusCode(200)
21 | .body(is("hello"));
22 | }
23 |
24 | @Test
25 | public void testGreetingEndpoint() {
26 | String uuid = UUID.randomUUID().toString();
27 | given()
28 | .pathParam("name", uuid)
29 | .when().get("/hello/greeting/{name}")
30 | .then()
31 | .statusCode(200)
32 | .body(is("hello " + uuid));
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 |
5 | stacks.app
6 | stacks-app
7 | 1.0-SNAPSHOT
8 |
9 |
10 | 1.7
11 | 1.7
12 | incubator/java-openliberty/image/project/util
13 |
14 |
15 | ${src.dir}
16 |
17 |
18 |
19 |
20 |
21 |
22 | org.osgi
23 | org.osgi.core
24 | 6.0.0
25 | provided
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/src/main/resources/META-INF/resources/prices.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Prices
6 |
7 |
9 |
11 |
12 |
13 |
14 |
15 |
Last price
16 |
17 |
The last price is N/A €.
18 |
19 |
20 |
21 |
22 |
28 |
--------------------------------------------------------------------------------
/incubator/nodejs-express/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM appsody/nodejs:0.3
2 |
3 | ENV APPSODY_PROJECT_DIR=/project
4 | ENV APPSODY_MOUNTS=/:/project/user-app
5 | ENV APPSODY_DEPS=/project/user-app/node_modules
6 |
7 | ENV APPSODY_WATCH_DIR=/project/user-app
8 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/node_modules
9 | ENV APPSODY_WATCH_REGEX="^.*.js$"
10 |
11 | ENV APPSODY_PREP="npm install --prefix user-app"
12 |
13 | ENV APPSODY_RUN="npm start"
14 | ENV APPSODY_RUN_ON_CHANGE="npm start"
15 | ENV APPSODY_RUN_KILL=true
16 |
17 | ENV APPSODY_DEBUG="npm run debug"
18 | ENV APPSODY_DEBUG_ON_CHANGE="npm run debug"
19 | ENV APPSODY_DEBUG_KILL=true
20 |
21 | ENV APPSODY_TEST="npm test && npm test --prefix user-app"
22 | ENV APPSODY_TEST_ON_CHANGE=""
23 | ENV APPSODY_TEST_KILL=false
24 |
25 | COPY ./LICENSE /licenses/
26 | COPY ./project /project
27 | COPY ./config /config
28 | WORKDIR /project
29 | RUN npm install
30 |
31 | ENV PORT=3000
32 | ENV APPSODY_DEBUG_PORT=9229
33 | ENV NODE_PATH=/project/user-app/node_modules
34 |
35 | EXPOSE 3000
36 | EXPOSE 9229
37 |
--------------------------------------------------------------------------------
/experimental/rust-tide/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM docker.io/number9/rust-tide-base:0.3.0 as server
2 |
3 | FROM rust:1.44.0-buster as builder
4 |
5 | COPY --from=server /project/server /project/server
6 |
7 | WORKDIR "/project/user-app"
8 |
9 | COPY * /project/user-app/
10 |
11 | # get user application dependencies
12 | RUN cargo fetch
13 |
14 | #copy user code
15 | COPY user-app/src /project/user-app/
16 |
17 | WORKDIR "/project/server/bin"
18 |
19 | # build for release
20 | RUN cargo build --release \
21 | && echo "#!/bin/bash" > run.sh \
22 | && bin=$(find ./target/release -maxdepth 1 -perm -111 -type f| head -n 1) \
23 | && echo ./${bin##*/} >> run.sh \
24 | && chmod 755 run.sh
25 |
26 | FROM debian:buster-slim
27 |
28 | RUN useradd rust
29 |
30 | WORKDIR "/project/user-app"
31 |
32 | # get files and built binary from previous image
33 | COPY --from=builder /project/server/bin/run.sh /project/server/bin/Cargo.toml /project/server/bin/target/release/ ./
34 |
35 | USER rust
36 |
37 | ENV PORT 8000
38 |
39 | EXPOSE 8000
40 |
41 | CMD ["./run.sh"]
42 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ### Checklist:
2 |
3 | - [ ] Read the [Code of Conduct](https://github.com/appsody/website/blob/master/CODE_OF_CONDUCT.md) and [Contributing Guidelines](https://github.com/appsody/website/blob/master/CONTRIBUTING.md).
4 |
5 | - [ ] Followed the [commit message guidelines](https://github.com/appsody/website/blob/master/CONTRIBUTING.md#commit-message-guidelines).
6 |
7 | - [ ] Stack adheres to [Appsody stack structure](https://github.com/appsody/website/blob/master/content/docs/stacks/stacks-overview.md#stack-structure).
8 |
9 | ### Modifying an existing stack:
10 |
11 | - [ ] Updated the stack version in `stack.yaml`
12 |
13 |
14 |
15 | ### Contributing a new stack:
16 |
17 | - Describe how application dependencies are managed:
18 |
19 | - Explain how Appsody file watcher is utilized:
20 |
21 | - Describe other Appsody environment variables defined by the stack image:
22 |
23 | - Describe any limitations and known issues:
24 |
25 |
26 | ### Related Issues:
27 |
28 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/src/main/java/org/acme/kafka/PriceResource.java:
--------------------------------------------------------------------------------
1 | package org.acme.kafka;
2 |
3 | import javax.inject.Inject;
4 | import javax.ws.rs.GET;
5 | import javax.ws.rs.Path;
6 | import javax.ws.rs.Produces;
7 | import javax.ws.rs.core.MediaType;
8 |
9 | import org.jboss.resteasy.annotations.SseElementType;
10 | import org.reactivestreams.Publisher;
11 |
12 | import org.eclipse.microprofile.reactive.messaging.Channel;
13 |
14 | /**
15 | * A simple resource retrieving the "in-memory" "my-data-stream" and sending the items to a server sent event.
16 | */
17 | @Path("/prices")
18 | public class PriceResource {
19 |
20 | @Inject
21 | @Channel("my-data-stream")
22 | Publisher prices;
23 |
24 | @GET
25 | @Path("/stream")
26 | @Produces(MediaType.SERVER_SENT_EVENTS) // denotes that server side events (SSE) will be produced
27 | @SseElementType("text/plain") // denotes that the contained data, within this SSE, is just regular text/plain data
28 | public Publisher stream() {
29 | return prices;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/experimental/nodejs-functions/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM appsody/nodejs-express:0.3
2 |
3 | ENV APPSODY_MOUNTS=/:/project/user-app/functions
4 | ENV APPSODY_DEPS=/project/user-app/functions/node_modules
5 |
6 | ENV APPSODY_WATCH_DIR=/project/user-app/functions
7 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/functions/node_modules
8 |
9 | ENV APPSODY_PREP="npm install --prefix user-app/functions && npm audit fix --prefix user-app/functions"
10 |
11 | ENV APPSODY_RUN="npm start"
12 | ENV APPSODY_RUN_ON_CHANGE="npm start"
13 | ENV APPSODY_RUN_KILL=true
14 |
15 | ENV APPSODY_DEBUG="npm run debug"
16 | ENV APPSODY_DEBUG_ON_CHANGE="npm run debug"
17 | ENV APPSODY_DEBUG_KILL=true
18 |
19 | ENV APPSODY_TEST="npm test && npm test --prefix user-app/functions"
20 | ENV APPSODY_TEST_ON_CHANGE=""
21 | ENV APPSODY_TEST_KILL=false
22 |
23 | COPY ./LICENSE /licenses/
24 | COPY ./project /project/user-app
25 | COPY ./config /config
26 | WORKDIR /project
27 | RUN npm install && npm audit fix
28 |
29 | ENV PORT=3000
30 | ENV NODE_PATH=/project/user-app/functions/node_modules
31 |
32 | EXPOSE 3000
33 | EXPOSE 9229
34 |
--------------------------------------------------------------------------------
/incubator/quarkus/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | # Dockerfile for building the stack
2 | FROM quay.io/quarkus/centos-quarkus-maven:19.3.1-java8
3 |
4 | COPY ./LICENSE /licenses/
5 | COPY ./project /project
6 | COPY ./config /config
7 |
8 | WORKDIR /project
9 |
10 | RUN mvn -N io.takari:maven:wrapper -Dmaven=$(mvn help:evaluate -Dexpression=maven.version -q -DforceStdout)
11 | RUN mvn -B install dependency:go-offline -DskipTests
12 |
13 | RUN mkdir -p /project/user-app/target
14 | ENV APPSODY_MOUNTS=".:/project/user-app"
15 | ENV APPSODY_DEPS="/project/user-app/target;/home/quarkus/.m2"
16 | ENV APPSODY_PREP=""
17 |
18 | ENV APPSODY_RUN="./mvnw -B compile quarkus:dev"
19 | ENV APPSODY_RUN_ON_CHANGE=""
20 | ENV APPSODY_RUN_KILL=false
21 |
22 | ENV APPSODY_DEBUG="./mvnw -B -Ddebug compile quarkus:dev"
23 | ENV APPSODY_DEBUG_ON_CHANGE=""
24 | ENV APPSODY_DEBUG_KILL=false
25 |
26 | ENV APPSODY_TEST="./mvnw -B test"
27 | ENV APPSODY_TEST_ON_CHANGE="./mvnw -B test"
28 | ENV APPSODY_TEST_KILL=true
29 |
30 | WORKDIR /project/user-app
31 |
32 | ENV PORT=8080
33 | ENV APPSODY_DEBUG_PORT=5005
34 |
35 | EXPOSE 8080
36 | EXPOSE 5005
37 |
--------------------------------------------------------------------------------
/incubator/kitura/image/config/app-deploy.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: appsody.dev/v1beta1
2 | kind: AppsodyApplication
3 | metadata:
4 | name: APPSODY_PROJECT_NAME
5 | spec:
6 | # Add fields here
7 | version: 1.0.0
8 | applicationImage: APPSODY_DOCKER_IMAGE
9 | stack: APPSODY_STACK
10 | service:
11 | type: NodePort
12 | port: APPSODY_PORT
13 | annotations:
14 | prometheus.io/scrape: 'true'
15 | monitoring:
16 | labels:
17 | k8s-app: APPSODY_PROJECT_NAME
18 | readinessProbe:
19 | # By default, Kitura's liveness and readiness endpoints are the same.
20 | # You may wish to implement a custom readiness endpoint that is appropriate for
21 | # the initialization of your app - if so, adjust the route here.
22 | failureThreshold: 12
23 | httpGet:
24 | path: /health
25 | port: APPSODY_PORT
26 | initialDelaySeconds: 5
27 | periodSeconds: 2
28 | timeoutSeconds: 1
29 | livenessProbe:
30 | failureThreshold: 12
31 | httpGet:
32 | path: /health
33 | port: APPSODY_PORT
34 | initialDelaySeconds: 5
35 | periodSeconds: 2
36 | expose: true
37 |
--------------------------------------------------------------------------------
/experimental/rocket/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM rustlang/rust:nightly
2 |
3 | ENV CARGO_HOME=/usr/local/cargo/deps
4 | ENV CARGO_TARGET_DIR=$CARGO_HOME/target
5 |
6 | ENV APPSODY_MOUNTS=/Cargo.toml:/project/copy/Cargo.toml;/src:/project/user-app/src/
7 | ENV APPSODY_DEPS=$CARGO_HOME
8 | ENV APPSODY_PROJECT_DIR=/project
9 |
10 | ENV APPSODY_WATCH_DIR="/project/user-app"
11 | ENV APPSODY_WATCH_IGNORE_DIR="/project/user-app/.appsody"
12 | ENV APPSODY_WATCH_REGEX="(^.*.rs$)"
13 |
14 | ENV ROCKET_ADDRESS=0.0.0.0
15 | ENV ROCKET_PORT=8000
16 |
17 | ENV APPSODY_PREP="cp /project/copy/Cargo.toml /project/user-app/Cargo.toml && cargo add -q appsody-rocket --path=../deps"
18 |
19 | ENV APPSODY_RUN="cargo run"
20 | ENV APPSODY_RUN_ON_CHANGE="cargo run"
21 | ENV APPSODY_RUN_KILL=true
22 |
23 | ENV APPSODY_TEST="cargo test -p appsody-rocket && cargo test"
24 |
25 | COPY ./LICENSE /licenses
26 | COPY ./project /project
27 | COPY ./config /config
28 |
29 | WORKDIR /project/deps
30 |
31 | RUN cp /project/cargo-add /usr/local/cargo/bin && cargo fetch
32 |
33 | WORKDIR /project/user-app
34 |
35 | ENV PORT=8000
36 |
37 | EXPOSE 8000
38 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/src/__tests__/acceptance/home-page.acceptance.ts:
--------------------------------------------------------------------------------
1 | import {Client} from '@loopback/testlab';
2 | import {BootableRestApplication} from '../..';
3 | import {setupApplication} from './test-helper';
4 |
5 | describe('HomePage', () => {
6 | let app: BootableRestApplication;
7 | let client: Client;
8 |
9 | before('setupApplication', async () => {
10 | ({app, client} = await setupApplication());
11 | });
12 |
13 | after(async () => {
14 | await app.stop();
15 | });
16 |
17 | it('exposes a default home page', async () => {
18 | await client
19 | .get('/')
20 | .expect(200)
21 | .expect('Content-Type', /text\/html/);
22 | });
23 |
24 | it('exposes self-hosted explorer', async () => {
25 | await client
26 | .get('/explorer/')
27 | .expect(200)
28 | .expect('Content-Type', /text\/html/)
29 | .expect(/LoopBack API Explorer/);
30 | });
31 |
32 | it('exposes /health', async () => {
33 | await client
34 | .get('/health')
35 | .expect(200)
36 | .expect('Content-Type', /application\/json/);
37 | });
38 | });
39 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/src/main/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Hello from Appsody!
5 |
6 |
7 | Hello from Appsody!
8 | Next steps with Spring Boot 2:
9 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Hello from Appsody!
5 |
6 |
7 | Hello from Appsody!
8 | Next steps with Spring Boot 2:
9 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/src/main/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Hello from Appsody!
5 |
6 |
7 | Hello from Appsody!
8 | Next steps with Spring Boot 2:
9 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/experimental/vertx/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | # Dockerfile for building the stack
2 | FROM adoptopenjdk/openjdk8-openj9
3 |
4 | USER root
5 | RUN apt-get -qq update \
6 | && apt-get -qq install -y curl maven \
7 | && DEBIAN_FRONTEND=noninteractive apt-get -qq upgrade -y \
8 | && apt-get -qq clean \
9 | && rm -rf /tmp/* /var/lib/apt/lists/*
10 | RUN mkdir -p /.m2/repository
11 |
12 | COPY ./LICENSE /licenses/
13 | COPY ./project /project
14 | COPY ./config /config
15 | WORKDIR /project/
16 | RUN mvn -B install dependency:go-offline -DskipTests
17 |
18 | ENV APPSODY_USER_RUN_AS_LOCAL=true
19 |
20 | ENV APPSODY_MOUNTS=".:/project/user-app/;~/.m2/repository:/.m2/repository"
21 | ENV APPSODY_DEPS=
22 |
23 | ENV APPSODY_RUN="mvn -B compile vertx:run"
24 | ENV APPSODY_RUN_ON_CHANGE=""
25 | ENV APPSODY_RUN_KILL=false
26 |
27 | ENV APPSODY_DEBUG="mvn -B compile vertx:debug"
28 | ENV APPSODY_DEBUG_ON_CHANGE=""
29 | ENV APPSODY_DEBUG_KILL=false
30 |
31 | ENV APPSODY_TEST="mvn -B test"
32 | ENV APPSODY_TEST_ON_CHANGE="mvn -B test"
33 | ENV APPSODY_TEST_KILL=true
34 |
35 | WORKDIR /project/user-app
36 |
37 | ENV PORT=8080
38 |
39 | EXPOSE 8080
40 | EXPOSE 5005
41 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/src/main/resources/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Hello from Appsody!
5 |
6 |
7 | Hello from Appsody!
8 | Next steps with Spring Boot 2:
9 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/ci/list.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # setup environment
4 | . $( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/env.sh
5 |
6 | # expose an extension point for running beforer main 'list' processing
7 | exec_hooks $script_dir/ext/pre_list.d
8 |
9 | if [ -z "$STACKS_LIST" ]
10 | then
11 | echo "Listing all stacks"
12 | for repo_name in $REPO_LIST
13 | do
14 | repo_dir=$base_dir/$repo_name
15 | if [ -d $repo_dir ]
16 | then
17 | for stack_exists in $repo_dir/*/stack.yaml
18 | do
19 | if [ -f $stack_exists ]
20 | then
21 | var=`echo ${stack_exists#"$base_dir/"}`
22 | repo_stack=`awk '{split($1, a, "/*"); print a[1]"/"a[2]}' <<< $var`
23 | STACKS_LIST+=("$repo_stack")
24 | fi
25 | done
26 | fi
27 | done
28 | STACKS_LIST=${STACKS_LIST[@]}
29 | fi
30 |
31 | echo "Building stacks: $STACKS_LIST"
32 |
33 | # expose environment variable for stacks
34 | export STACKS_LIST
35 |
36 | # expose an extension point for running after main 'list' processing
37 | exec_hooks $script_dir/ext/post_list.d
38 |
39 |
--------------------------------------------------------------------------------
/experimental/rust/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM rust:1.40
2 |
3 | RUN apt-get update && apt-get install -y lldb musl-tools
4 | RUN rustup target add x86_64-unknown-linux-musl
5 | RUN cargo install sccache
6 |
7 | ENV CARGO_HOME=/usr/local/cargo/deps
8 | ENV SCCACHE_DIR=/project/sccache
9 | ENV RUSTC_WRAPPER=sccache
10 |
11 | ENV APPSODY_MOUNTS=.:/project/user-app;~/.cache/sccache:/project/sccache
12 | ENV APPSODY_DEPS=$CARGO_HOME
13 |
14 | ENV APPSODY_WATCH_DIR="/project/user-app"
15 | ENV APPSODY_WATCH_REGEX="^(Cargo.toml|.*.rs)$"
16 |
17 | ENV APPSODY_RUN="cargo run --target x86_64-unknown-linux-musl"
18 | ENV APPSODY_RUN_ON_CHANGE="$APPSODY_RUN"
19 | ENV APPSODY_RUN_KILL=true
20 |
21 | ENV APPSODY_TEST="cargo test"
22 |
23 | ENV APPSODY_DEBUG="cargo build --target x86_64-unknown-linux-musl && lldb-server platform --listen '*:1234' --min-gdbserver-port 5000 --max-gdbserver-port 5001 --server"
24 | ENV APPSODY_DEBUG_ON_CHANGE="$APPSODY_DEBUG"
25 | ENV APPSODY_DEBUG_KILL=true
26 |
27 | COPY ./LICENSE /licenses
28 | COPY ./project /project
29 | COPY ./config /config
30 |
31 | WORKDIR /project/user-app
32 |
33 | ENV PORT=8000
34 |
35 | EXPOSE 8000
36 | EXPOSE 1234
37 | EXPOSE 5000
38 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Sources/AppsodyKitura/Logging.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is supplied by the appsody/kitura base image. DO NOT MODIFY.
3 | */
4 |
5 | import LoggerAPI
6 | import HeliumLogger
7 |
8 | /// Initialize logging using HeliumLogger, using the `LOG_LEVEL` environment
9 | /// variable. This must match the name of a `LoggerMessageType`, or `none` to
10 | /// disable logging entirely.
11 | ///
12 | /// If no `LOG_LEVEL` is specified, the default level of `info` will be used.
13 | ///
14 | func initializeLogging(value: String?) {
15 | let logLevel: LoggerMessageType
16 | switch value?.lowercased() {
17 | case "error":
18 | logLevel = .error
19 | case "warning":
20 | logLevel = .warning
21 | case "info":
22 | logLevel = .info
23 | case "verbose":
24 | logLevel = .verbose
25 | case "debug":
26 | logLevel = .debug
27 | case "exit":
28 | logLevel = .exit
29 | case "entry":
30 | logLevel = .entry
31 | case "none", "false", "off", "disabled":
32 | return
33 | default:
34 | logLevel = .info
35 | }
36 | HeliumLogger.use(logLevel)
37 | }
38 |
--------------------------------------------------------------------------------
/incubator/node-red/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Install the app dependencies in a full Node docker image
2 | FROM node:12
3 |
4 |
5 | # Copying individual files/folders as buildah 1.9.0 does not honour .dockerignore
6 | COPY package*.json /project/
7 | COPY *.js /project/
8 | COPY user-app /project/user-app
9 | # Removing node_modules as we can not make assumptions about file structure of user-app
10 | RUN rm -rf /project/user-app/node_modules && mkdir -p /project/user-app/node_modules
11 |
12 | # Install stack dependencies
13 | WORKDIR /project
14 | RUN npm install --production
15 |
16 | # Install user-app dependencies
17 | WORKDIR /project/user-app
18 | RUN npm install --production
19 |
20 | # Creating a tar to work around poor copy performance when using buildah 1.9.0
21 | RUN cd / && tar czf project.tgz project
22 |
23 | # Copy the dependencies into a slim Node docker image
24 | FROM node:12-slim
25 |
26 | # Copy project with dependencies
27 | COPY --chown=node:node --from=0 /project.tgz /
28 | RUN tar xf project.tgz && chown -R node:node /project && rm project.tgz
29 | WORKDIR /project
30 |
31 | ENV NODE_ENV production
32 | ENV PORT 3000
33 |
34 | USER node
35 |
36 | EXPOSE 3000
37 | CMD ["npm", "start"]
38 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kotlin/src/main/kotlin/application/LivenessEndpoint.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright © 2019 IBM Corp. All rights reserved.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 | * except in compliance with the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the
10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 | * either express or implied. See the License for the specific language governing permissions
12 | * and limitations under the License.
13 | */
14 |
15 | package application
16 |
17 | import org.springframework.boot.actuate.endpoint.annotation.Endpoint
18 | import org.springframework.boot.actuate.endpoint.annotation.ReadOperation
19 | import org.springframework.stereotype.Component
20 |
21 | // Simple custom liveness check
22 | @Endpoint(id = "liveness")
23 | @Component
24 | class LivenessEndpoint {
25 |
26 | @ReadOperation
27 | fun testLiveness(): String {
28 | return "{\"status\":\"UP\"}"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/src/main/java/org/acme/kafka/PriceConverter.java:
--------------------------------------------------------------------------------
1 | package org.acme.kafka;
2 |
3 | import javax.enterprise.context.ApplicationScoped;
4 |
5 | import org.eclipse.microprofile.reactive.messaging.Acknowledgment;
6 | import org.eclipse.microprofile.reactive.messaging.Incoming;
7 | import org.eclipse.microprofile.reactive.messaging.Outgoing;
8 |
9 | import io.smallrye.reactive.messaging.annotations.Broadcast;
10 |
11 | /**
12 | * A bean consuming data from the "prices" Kafka topic and applying some conversion.
13 | * The result is pushed to the "my-data-stream" stream which is an in-memory stream.
14 | */
15 | @ApplicationScoped
16 | public class PriceConverter {
17 |
18 | private static final double CONVERSION_RATE = 0.88;
19 |
20 | // Consume from the `prices` channel and produce to the `my-data-stream` channel
21 | @Incoming("prices")
22 | @Outgoing("my-data-stream")
23 | // Send to all subscribers
24 | @Broadcast
25 | // Acknowledge the messages before calling this method.
26 | @Acknowledgment(Acknowledgment.Strategy.PRE_PROCESSING)
27 | public double process(int priceInUsd) {
28 | return priceInUsd * CONVERSION_RATE;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/java/application/config/KafkaProducer.java:
--------------------------------------------------------------------------------
1 | package application.config;
2 |
3 | import org.springframework.beans.factory.annotation.Autowired;
4 | import org.springframework.boot.CommandLineRunner;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.kafka.core.KafkaTemplate;
8 |
9 | import application.KafkaConsumer;
10 |
11 | import java.util.UUID;
12 |
13 | @Configuration
14 | public class KafkaProducer {
15 |
16 | @Autowired
17 | KafkaTemplate kafkaTemplate;
18 |
19 | private static String TOPIC_NAME = "orders";
20 |
21 | // a simple kafka producer that publishes a message to the "orders" topic after the application is initialized
22 | @Bean
23 | public CommandLineRunner kafkaCommandLineRunner(KafkaConsumer kafkaConsumer) {
24 | return args -> {
25 | String data = "testData:" + UUID.randomUUID();
26 | System.out.println("Sending message to kafka = " + data);
27 | kafkaTemplate.send(TOPIC_NAME, data);
28 | kafkaConsumer.getCountDownLatch().await();
29 | };
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Install the app dependencies
2 | FROM swift:5.1 as builder
3 |
4 | # Install OS updates
5 | RUN apt-get update \
6 | && apt-get install -y zlib1g-dev libcurl4-openssl-dev libssl-dev \
7 | && apt-get clean \
8 | && echo 'Finished installing dependencies'
9 |
10 | # Copy extracted project
11 | WORKDIR "/project"
12 | COPY . /project
13 |
14 | # Replace dependencies with a pristine copy, in case they have been modified
15 | RUN rm -rf /project/user-app/.appsody
16 | COPY ./deps /project/user-app/.appsody
17 |
18 | # Build project, and discover executable name
19 | WORKDIR "/project/user-app"
20 | RUN echo '#!/bin/bash' > run.sh \
21 | && swift build -c release | tee output.txt \
22 | && cat output.txt | awk 'END {print "./.build/x86_64-unknown-linux/release/" $NF}' >> run.sh \
23 | && chmod 755 run.sh
24 |
25 | FROM swift:5.1-slim
26 |
27 | # Define a kitura user
28 | RUN useradd -ms /bin/bash kitura
29 |
30 | # Copy built project
31 | COPY --chown=kitura:kitura --from=builder /project /project
32 |
33 | # Configure listening port
34 | ENV PORT 8080
35 | EXPOSE 8080
36 |
37 | # Run application as kitura user
38 | USER kitura
39 | WORKDIR "/project/user-app"
40 | CMD ["./run.sh"]
41 |
--------------------------------------------------------------------------------
/incubator/python-flask/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.7
2 |
3 | RUN pip install --upgrade pip
4 |
5 | RUN useradd -m worker
6 | WORKDIR /project
7 | # It is a real shame that WORKDIR doesn't honor the current user (or even take a chown option), so.....
8 | RUN chown worker:worker /project
9 | USER worker
10 |
11 | RUN pip install --upgrade --user pipenv
12 | ENV PATH=/home/worker/.local/bin:$PATH
13 |
14 | COPY --chown=worker:worker . ./
15 |
16 | # First we get the dependencies for the stack itself
17 | RUN pipenv lock -r > requirements.txt
18 | # Now add in any for the app, that the developer has added (there seems to be
19 | # no easy way of specifying a different location for the Pipfile, so have to
20 | # change the working directory!)
21 | WORKDIR /project/userapp
22 | RUN pipenv lock -r > ../requirements-additional.txt
23 | # Now process the combined requirements
24 | WORKDIR /project
25 | RUN python -m pip install -r requirements.txt -t /project/deps
26 | RUN python -m pip install -r requirements-additional.txt -t /project/deps
27 |
28 | ENV PYTHONPATH=/project/deps
29 | ENV FLASK_APP=server/__init__.py
30 |
31 | ENV PORT=8080
32 | EXPOSE 8080
33 | CMD ["python", "-m", "flask", "run", "--host=0.0.0.0", "--port=8080"]
--------------------------------------------------------------------------------
/incubator/nodejs/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM node:12
2 |
3 | ENV APPSODY_MOUNTS=/:/project/user-app
4 | ENV APPSODY_DEPS=/project/user-app/node_modules
5 | ENV APPSODY_PROJECT_DIR=/project
6 |
7 | ENV APPSODY_WATCH_DIR=/project/user-app
8 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/node_modules
9 | ENV APPSODY_WATCH_REGEX="^.*.js$"
10 |
11 | ENV APPSODY_PREP="npm install && npm run build --if-present"
12 |
13 | ENV APPSODY_RUN="npm start --node-options --require=appmetrics-dash/attach"
14 | ENV APPSODY_RUN_ON_CHANGE="npm start --node-options --require=appmetrics-dash/attach"
15 | ENV APPSODY_RUN_KILL=true
16 |
17 | ENV APPSODY_DEBUG="npm start --node-options --inspect=0.0.0.0 --require=appmetrics-dash/attach"
18 | ENV APPSODY_DEBUG_ON_CHANGE="npm start --node-options --inspect=0.0.0.0 --require=appmetrics-dash/attach"
19 | ENV APPSODY_DEBUG_KILL=true
20 |
21 | ENV APPSODY_TEST="npm test"
22 | ENV APPSODY_TEST_ON_CHANGE=""
23 | ENV APPSODY_TEST_KILL=false
24 |
25 | COPY ./LICENSE /licenses/
26 | COPY ./project /project
27 | COPY ./config /config
28 |
29 | WORKDIR /project
30 | RUN npm install
31 |
32 | WORKDIR /project/user-app
33 |
34 | ENV PORT=3000
35 | ENV APPSODY_DEBUG_PORT=9229
36 |
37 | EXPOSE 3000
38 | EXPOSE 9229
39 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/src/main/java/application/LivenessEndpoint.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright © 2019 IBM Corp. All rights reserved.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 | * except in compliance with the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the
10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 | * either express or implied. See the License for the specific language governing permissions
12 | * and limitations under the License.
13 | */
14 |
15 | package application;
16 |
17 | import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
18 | import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
19 | import org.springframework.stereotype.Component;
20 |
21 | // Simple custom liveness check
22 | @Endpoint(id = "liveness")
23 | @Component
24 | public class LivenessEndpoint {
25 |
26 | @ReadOperation
27 | public String testLiveness() {
28 | return "{\"status\":\"UP\"}";
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/kafka/src/main/java/application/LivenessEndpoint.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright © 2019 IBM Corp. All rights reserved.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 | * except in compliance with the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the
10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 | * either express or implied. See the License for the specific language governing permissions
12 | * and limitations under the License.
13 | */
14 |
15 | package application;
16 |
17 | import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
18 | import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
19 | import org.springframework.stereotype.Component;
20 |
21 | // Simple custom liveness check
22 | @Endpoint(id = "liveness")
23 | @Component
24 | public class LivenessEndpoint {
25 |
26 | @ReadOperation
27 | public String testLiveness() {
28 | return "{\"status\":\"UP\"}";
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Sources/AppsodyKitura/Metrics.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * This source file is supplied by the appsody/kitura base image. DO NOT MODIFY.
3 | */
4 |
5 | import Kitura
6 | import SwiftMetrics
7 | import SwiftMetricsDash
8 | import SwiftMetricsPrometheus
9 | import SwiftMetricsREST
10 | import LoggerAPI
11 |
12 | var swiftMetrics: SwiftMetrics?
13 | var swiftMetricsDash: SwiftMetricsDash?
14 | var swiftMetricsPrometheus: SwiftMetricsPrometheus?
15 | var swiftMetricsRest: SwiftMetricsREST?
16 |
17 | func initializeMetrics(router: Router) {
18 | do {
19 | let metrics = try SwiftMetrics()
20 | let dashboard = try SwiftMetricsDash(swiftMetricsInstance: metrics, endpoint: router)
21 | let prometheus = try SwiftMetricsPrometheus(swiftMetricsInstance: metrics, endpoint: router)
22 | let rest = try SwiftMetricsREST(swiftMetricsInstance: metrics, endpoint: router)
23 |
24 | swiftMetrics = metrics
25 | swiftMetricsDash = dashboard
26 | swiftMetricsPrometheus = prometheus
27 | swiftMetricsRest = rest
28 | Log.info("Initialized metrics.")
29 | } catch {
30 | Log.warning("Failed to initialize metrics: \(error)")
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/templates/default/src/main/java/application/LivenessEndpoint.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright © 2019 IBM Corp. All rights reserved.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 | * except in compliance with the License. You may obtain a copy of the License at
6 | *
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Unless required by applicable law or agreed to in writing, software distributed under the
10 | * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11 | * either express or implied. See the License for the specific language governing permissions
12 | * and limitations under the License.
13 | */
14 |
15 | package application;
16 |
17 | import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
18 | import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
19 | import org.springframework.stereotype.Component;
20 |
21 | // Simple custom liveness check
22 | @Endpoint(id = "liveness")
23 | @Component
24 | public class LivenessEndpoint {
25 |
26 | @ReadOperation
27 | public String testLiveness() {
28 | return "{\"status\":\"UP\"}";
29 | }
30 |
31 | }
--------------------------------------------------------------------------------
/ci/nginx/nginx.conf:
--------------------------------------------------------------------------------
1 | user nginx;
2 | worker_processes 1;
3 | daemon off;
4 |
5 | # Default nginx image symlinks:
6 | # ln -sf /dev/stdout /var/log/nginx/access.log
7 | # ln -sf /dev/stderr /var/log/nginx/error.log
8 |
9 | error_log /var/log/nginx/error.log warn;
10 | pid /var/run/nginx.pid;
11 |
12 | events {
13 | worker_connections 1024;
14 | }
15 |
16 | http {
17 | include /etc/nginx/mime.types;
18 | default_type application/octet-stream;
19 |
20 | sendfile off;
21 | tcp_nopush on;
22 | tcp_nodelay on;
23 |
24 | gzip on;
25 | gzip_min_length 50;
26 | gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
27 |
28 | keepalive_timeout 65;
29 |
30 | server {
31 | listen 8080;
32 |
33 | access_log /var/log/nginx/access.log;
34 |
35 | error_page 404 /404.html;
36 |
37 | server_name localhost;
38 |
39 | location / {
40 | root /opt/www/public;
41 | autoindex on;
42 | }
43 |
44 | location /health {
45 | access_log off;
46 | error_log off;
47 | return 200 'ok';
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/experimental/rust-tide/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM rust:1.44.0-buster
2 |
3 | RUN apt-get update && apt-get install -y gdbserver
4 |
5 | ENV CARGO_HOME=/usr/local/cargo/deps
6 |
7 | ENV APPSODY_MOUNTS=/:/project/user-app
8 | ENV APPSODY_DEPS=$CARGO_HOME
9 | ENV APPSODY_WATCH_DIR=/project/user-app
10 | ENV APPSODY_WATCH_REGEX="^(Cargo.toml|.*.rs)$"
11 | ENV APPSODY_WATCH_IGNORE_DIR=/project/server/bin/target;/project/user-app/target
12 | ENV APPSODY_PROJECT_DIR=/project
13 | ENV APPSODY_RUN="cargo run --manifest-path ../server/bin/Cargo.toml"
14 | ENV APPSODY_RUN_ON_CHANGE=$APPSODY_RUN
15 | ENV APPSODY_RUN_KILL=true
16 |
17 | ENV APPSODY_DEBUG="cargo build --manifest-path ../server/bin/Cargo.toml && gdbserver localhost:1234 /project/server/bin/target/debug/rust-tide-server"
18 | ENV APPSODY_DEBUG_ON_CHANGE="$APPSODY_DEBUG"
19 | ENV APPSODY_DEBUG_KILL=true
20 | ENV APPSODY_DEBUG_PORT=1234
21 |
22 | ENV APPSODY_TEST="/project/test-stack.sh"
23 | ENV APPSODY_TEST_ON_CHANGE=$APPSODY_TEST
24 | ENV APPSODY_TEST_KILL=true
25 |
26 | COPY ./LICENSE /licenses/
27 | COPY ./project /project
28 | COPY ./config /config
29 |
30 | WORKDIR /project/user-app
31 |
32 | # Expose the relevant ports (change this to be specific to your application).
33 | ENV PORT=8000
34 |
35 | EXPOSE 8000
36 | EXPOSE 1234
--------------------------------------------------------------------------------
/incubator/java-microprofile/image/project/util/check_version:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # This is a small utility script that uses OSGi VersionRange and Version
3 | # classes to verify whether or not a specified version matches is contained
4 | # within a specified range.
5 | #
6 | cd "$( dirname "${BASH_SOURCE[0]}" )"
7 |
8 | if [ $# -lt 1 ]; then
9 | ACTION=range
10 | else
11 | ACTION=$1
12 | shift
13 | fi
14 |
15 | range_check() {
16 | java -cp .:org.osgi.core-6.0.0.jar RangeIncludesVersion "$1" "$2"
17 | return $?
18 | }
19 |
20 | sniff() {
21 | range_check "$1" "$2"
22 | if [ $? -ne $3 ]; then
23 | echo "Test |'$1' contains '$2'| should return $3. Got $?"
24 | exit 1
25 | fi
26 | }
27 |
28 | case "$ACTION" in
29 | build)
30 | wget -q https://repo1.maven.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar
31 | javac -cp org.osgi.core-6.0.0.jar *.java
32 |
33 | sniff "[0.3,0.4)" "0.3.7" 0
34 | sniff "[0.3,0.4)" "0.4" 1
35 | sniff "[0.3,0.4)" "0.2" 1
36 | exit 0
37 | ;;
38 | contains)
39 | if [ $# -lt 2 ]; then
40 | echo "Specify version information: check_version contains "
41 | exit 1
42 | fi
43 |
44 | range_check "$1" "$2"
45 | exit $?
46 | ;;
47 | esac
48 |
49 |
--------------------------------------------------------------------------------
/incubator/java-openliberty/image/project/util/check_version:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # This is a small utility script that uses OSGi VersionRange and Version
3 | # classes to verify whether or not a specified version matches is contained
4 | # within a specified range.
5 | #
6 | cd "$( dirname "${BASH_SOURCE[0]}" )"
7 |
8 | if [ $# -lt 1 ]; then
9 | ACTION=range
10 | else
11 | ACTION=$1
12 | shift
13 | fi
14 |
15 | range_check() {
16 | java -cp .:org.osgi.core-6.0.0.jar RangeIncludesVersion "$1" "$2"
17 | return $?
18 | }
19 |
20 | sniff() {
21 | range_check "$1" "$2"
22 | if [ $? -ne $3 ]; then
23 | echo "Test |'$1' contains '$2'| should return $3. Got $?"
24 | exit 1
25 | fi
26 | }
27 |
28 | case "$ACTION" in
29 | build)
30 | wget -q https://repo1.maven.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar
31 | javac -cp org.osgi.core-6.0.0.jar *.java
32 |
33 | sniff "[0.3,0.4)" "0.3.7" 0
34 | sniff "[0.3,0.4)" "0.4" 1
35 | sniff "[0.3,0.4)" "0.2" 1
36 | exit 0
37 | ;;
38 | contains)
39 | if [ $# -lt 2 ]; then
40 | echo "Specify version information: check_version contains "
41 | exit 1
42 | fi
43 |
44 | range_check "$1" "$2"
45 | exit $?
46 | ;;
47 | esac
48 |
49 |
--------------------------------------------------------------------------------
/experimental/java-spring-boot2-liberty/image/project/util/check_version:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # This is a small utility script that uses OSGi VersionRange and Version
3 | # classes to verify whether or not a specified version matches is contained
4 | # within a specified range.
5 | #
6 | cd "$( dirname "${BASH_SOURCE[0]}" )"
7 |
8 | if [ $# -lt 1 ]; then
9 | ACTION=range
10 | else
11 | ACTION=$1
12 | shift
13 | fi
14 |
15 | range_check() {
16 | java -cp .:org.osgi.core-6.0.0.jar RangeIncludesVersion "$1" "$2"
17 | return $?
18 | }
19 |
20 | sniff() {
21 | range_check "$1" "$2"
22 | if [ $? -ne $3 ]; then
23 | echo "Test |'$1' contains '$2'| should return $3. Got $?"
24 | exit 1
25 | fi
26 | }
27 |
28 | case "$ACTION" in
29 | build)
30 | wget -q https://repo1.maven.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar
31 | javac -cp org.osgi.core-6.0.0.jar *.java
32 |
33 | sniff "[0.3,0.4)" "0.3.7" 0
34 | sniff "[0.3,0.4)" "0.4" 1
35 | sniff "[0.3,0.4)" "0.2" 1
36 | exit 0
37 | ;;
38 | contains)
39 | if [ $# -lt 2 ]; then
40 | echo "Specify version information: check_version contains "
41 | exit 1
42 | fi
43 |
44 | range_check "$1" "$2"
45 | exit $?
46 | ;;
47 | esac
48 |
49 |
--------------------------------------------------------------------------------
/experimental/rust/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rust:1.40 as builder
2 |
3 | # Install musl
4 | RUN apt-get update && apt-get install -y musl-tools
5 | RUN rustup target add x86_64-unknown-linux-musl
6 |
7 | WORKDIR "/project/user-app"
8 |
9 | # copy dependency files
10 | COPY /user-app/Cargo.toml Cargo.toml
11 |
12 | # get user application dependencies
13 | RUN cargo fetch
14 |
15 | #copy user code
16 | COPY /user-app/src ./src
17 |
18 | # build for release
19 | RUN cargo build --release --target x86_64-unknown-linux-musl \
20 | && cp $(find ./target/x86_64-unknown-linux-musl/release -maxdepth 1 -perm -111 -type f| head -n 1) ./target/app \
21 | && chmod 755 ./target/app
22 |
23 | # Create a "nobody" non-root user for the next image by crafting an /etc/passwd
24 | # file that the next image can copy in. This is necessary since the next image
25 | # is based on scratch, which doesn't have adduser, cat, echo, or even sh.
26 | RUN echo "nobody:x:65534:65534:Nobody:/:" > /etc_passwd
27 |
28 | FROM scratch
29 |
30 | WORKDIR "/project/user-app"
31 |
32 | # get files and built binary from previous image
33 | COPY --from=builder /project/user-app/target/app ./
34 | COPY --from=builder /etc_passwd /etc/passwd
35 |
36 | ENV PORT 8000
37 |
38 | USER nobody
39 |
40 | EXPOSE 8000
41 |
42 | CMD ["./app"]
43 |
--------------------------------------------------------------------------------
/incubator/kitura/image/project/deps/AppsodyKitura/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.1
2 | import PackageDescription
3 |
4 | /**
5 | * This source file is supplied by the appsody/kitura base image. DO NOT MODIFY.
6 | */
7 |
8 | let package = Package(
9 | name: "AppsodyKitura",
10 | products: [
11 | .library(
12 | name: "AppsodyKitura",
13 | targets: ["AppsodyKitura"]
14 | )
15 | ],
16 | dependencies: [
17 | .package(url: "https://github.com/IBM-Swift/Kitura.git", .upToNextMinor(from: "2.9.0")),
18 | .package(url: "https://github.com/IBM-Swift/HeliumLogger.git", from: "1.9.0"),
19 | .package(url: "https://github.com/IBM-Swift/Configuration.git", from: "3.0.0"),
20 | .package(url: "https://github.com/RuntimeTools/SwiftMetrics.git", from: "2.0.0"),
21 | .package(url: "https://github.com/IBM-Swift/Health.git", from: "1.0.0"),
22 | .package(url: "https://github.com/IBM-Swift/Kitura-OpenAPI.git", from: "1.3.0"),
23 | ],
24 | targets: [
25 | .target(name: "AppsodyKitura", dependencies: [ "Kitura", "HeliumLogger", "Configuration", "SwiftMetrics", "Health", "KituraOpenAPI" ]),
26 | .testTarget(name: "AppsodyKituraTests" , dependencies: [.target(name: "AppsodyKitura"), "Kitura", "HeliumLogger" ])
27 | ]
28 | )
29 |
--------------------------------------------------------------------------------
/samples/sample-stack/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | # Dockerfile for building the stack
2 |
3 | #See https://appsody.dev/docs/stacks/environment-variables for more information about each variable.
4 |
5 | ENV APPSODY_MOUNTS= #Mount directories
6 |
7 | ENV APPSODY_WATCH_DIR= #Directories to watch for changes in.
8 | ENV APPSODY_WATCH_IGNORE_DIR= #Directories to ignore changes in.
9 | ENV APPSODY_WATCH_REGEX= #Regex expression to describe which files are watched for changes in.
10 |
11 | ENV APPSODY_INSTALL= #Optional command executed before RUN/TEST/DEBUG
12 |
13 | ENV APPSODY_RUN= #Command executed in 'run' mode.
14 | ENV APPSODY_RUN_ON_CHANGE= #Command executed in 'run' mode when a change is detected.
15 | ENV APPSODY_RUN_KILL= #Signals whether to kill the server process before starting the ON_CHANGE action.
16 |
17 | ENV APPSODY_DEBUG= #Command executed in 'debug' mode
18 | ENV APPSODY_DEBUG_ON_CHANGE= #Command executed in 'debug' mode when a change is detected.
19 | ENV APPSODY_DEBUG_KILL= #Signals whether to kill the server process before starting the ON_CHANGE action.
20 |
21 | ENV APPSODY_TEST= #Command executed in 'test' mode
22 | ENV APPSODY_TEST_ON_CHANGE= #Command executed in 'test' mode when a change is detected.
23 | ENV APPSODY_TEST_KILL= #Signals whether to kill the server process before starting the ON_CHANGE action.
24 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/templates/scaffold/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | # Transpiled JavaScript files from Typescript
61 | /dist
62 |
63 | # Cache used by TypeScript's incremental build
64 | *.tsbuildinfo
65 |
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/Dockerfile-stack:
--------------------------------------------------------------------------------
1 | FROM appsody/nodejs:0.4
2 |
3 | ENV APPSODY_PROJECT_DIR=/project
4 | ENV APPSODY_MOUNTS=/:/project/user-app
5 | ENV APPSODY_DEPS=/project/user-app/node_modules
6 |
7 | ENV APPSODY_WATCH_DIR=/project/user-app
8 | ENV APPSODY_WATCH_IGNORE_DIR=/project/user-app/node_modules;/project/user-app/dist
9 | ENV APPSODY_WATCH_REGEX="^.*.ts$"
10 |
11 | # LoopBack 4 applications require 'npm run build' to transpile TypeScript source code
12 | ENV APPSODY_PREP="npm install --prefix user-app && npm run build --prefix user-app"
13 |
14 | ENV APPSODY_RUN="npm run pretest --prefix user-app && npm start"
15 | ENV APPSODY_RUN_ON_CHANGE="npm run pretest --prefix user-app && npm start"
16 | ENV APPSODY_RUN_KILL=true
17 |
18 | ENV APPSODY_DEBUG="npm run debug"
19 | ENV APPSODY_DEBUG_ON_CHANGE="npm run pretest --prefix user-app && npm run debug"
20 | ENV APPSODY_DEBUG_KILL=true
21 | ENV APPSODY_DEBUG_PORT=9229
22 |
23 | ENV APPSODY_TEST="npm test && npm test --prefix user-app"
24 | ENV APPSODY_TEST_ON_CHANGE=""
25 | ENV APPSODY_TEST_KILL=false
26 |
27 | COPY ./LICENSE /licenses/
28 | COPY ./project /project
29 | COPY ./config /config
30 |
31 | WORKDIR /project
32 | RUN npm install && npm run pretest
33 |
34 | ENV PORT=3000
35 | ENV NODE_PATH=/project/user-app/node_modules
36 |
37 | EXPOSE 3000
38 | EXPOSE 9229
39 |
--------------------------------------------------------------------------------
/experimental/rocket/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM rustlang/rust:nightly as builder
2 |
3 | WORKDIR "/project"
4 |
5 | COPY /deps /project/deps
6 |
7 | # copy dependency files
8 | COPY /copy/Cargo.toml cargo-add /project/
9 |
10 | #get stack dependencies
11 | RUN mv /project/cargo-add /usr/local/cargo/bin \
12 | && cargo fetch --manifest-path /project/deps/Cargo.toml \
13 | && cargo add -q appsody-rocket --path=../deps \
14 | && mkdir /project/user-app \
15 | && mv /project/Cargo.toml /project/user-app/
16 |
17 | WORKDIR "/project/user-app"
18 | # get user application dependencies
19 | RUN cargo fetch
20 |
21 | #copy user code
22 | COPY /user-app/src /project/user-app/src/
23 |
24 | ENV ROCKET_ADDRESS=0.0.0.0
25 |
26 | ENV ROCKET_PORT=8000
27 |
28 | # build for release
29 | RUN cargo build --release \
30 | && echo "#!/bin/bash" > run.sh \
31 | && bin=$(find ./target/release -maxdepth 1 -perm -111 -type f| head -n 1) \
32 | && echo ./${bin##*/} >> run.sh \
33 | && chmod 755 run.sh
34 |
35 | FROM rust:1.37-slim
36 |
37 | WORKDIR "/project"
38 |
39 | # get files and built binary from previous image
40 | COPY --from=builder /project/user-app/run.sh /project/user-app/Cargo.toml /project/user-app/target/release/ ./
41 |
42 | RUN rm -rf build deps examples incremental
43 |
44 | RUN useradd rust
45 |
46 | USER rust
47 |
48 | EXPOSE 8000
49 |
50 | CMD ["./run.sh"]
--------------------------------------------------------------------------------
/incubator/nodejs-loopback/image/project/Dockerfile:
--------------------------------------------------------------------------------
1 | # Install the app dependencies in a full Node docker image
2 | FROM node:12
3 |
4 | # Copying individual files/folders as buildah 1.9.0 does not honour .dockerignore
5 | COPY *.json /project/
6 | COPY user-app /project/user-app
7 | COPY src /project/src
8 |
9 | # Removing node_modules as we can not make assumptions about file structure of user-app
10 | RUN rm -rf /project/user-app/node_modules && mkdir -p /project/user-app/node_modules
11 |
12 | # Install stack dependencies
13 | WORKDIR /project
14 | RUN npm install
15 |
16 | # Install user-app dependencies
17 | WORKDIR /project/user-app
18 | # RUN `npm install` instead of `npm install --production` as we need to transpile TS code
19 | RUN npm install
20 |
21 | # Creating a tar to work around poor copy performance when using buildah 1.9.0
22 | RUN cd / && tar czf /project.tgz project
23 |
24 | # Copy the dependencies into a slim Node docker image
25 | FROM node:12-slim
26 |
27 | # Copy project with dependencies
28 | COPY --chown=node:node --from=0 /project.tgz /
29 | RUN tar xf project.tgz && chown -R node:node /project && rm project.tgz
30 | WORKDIR /project
31 |
32 | # Make sure TypeScript source code is transpiled
33 | RUN npm run build && npm run build --prefix user-app
34 |
35 | ENV NODE_ENV production
36 | ENV PORT 3000
37 |
38 | USER node
39 |
40 | CMD ["npm", "start"]
41 |
--------------------------------------------------------------------------------
/incubator/java-spring-boot2/templates/default/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 |
7 | {{.stack.parentpomgroup}}
8 | {{.stack.parentpomid}}
9 | {{.stack.parentpomrange}}
10 |
11 |
12 |
13 | dev.appsody
14 | default-application
15 | 0.0.1-SNAPSHOT
16 | jar
17 |
18 |
23 |
24 |
25 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-web
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/experimental/rocket/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/experimental/rust/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/nodejs/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/quarkus/templates/default/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/quarkus/templates/kafka/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/starter/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/samples/sample-stack/templates/hello/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/kafka/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/nodejs-express/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/incubator/python-flask/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------
/experimental/nodejs-functions/templates/simple/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "label": "Appsody: run",
6 | "type": "shell",
7 | "command": "appsody run",
8 | "group": "build",
9 | "problemMatcher": []
10 | },
11 | {
12 | "label": "Appsody: debug",
13 | "type": "shell",
14 | "command": "appsody debug",
15 | "group": "build",
16 | "problemMatcher": []
17 | },
18 | {
19 | "label": "Appsody: test",
20 | "type": "shell",
21 | "command": "appsody test",
22 | "group": "test",
23 | "problemMatcher": []
24 | },
25 | {
26 | "label": "Appsody: build",
27 | "type": "shell",
28 | "command": "appsody build",
29 | "group": "build",
30 | "problemMatcher": []
31 | },
32 | {
33 | "label": "Appsody: deploy",
34 | "type": "shell",
35 | "command": "appsody deploy",
36 | "group": "build",
37 | "problemMatcher": []
38 | },
39 | {
40 | "label": "Appsody: stop",
41 | "type": "shell",
42 | "command": "appsody stop",
43 | "group": "build",
44 | "problemMatcher": []
45 | }
46 | ]
47 | }
--------------------------------------------------------------------------------