Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hsiehshujeng/projen-simple
An initial project for projen. It crafts a custom construct by Typescript then publishes the construct into 4 popular programming language repositories, i.e., npm, PyPI, Central Maven, and NuGet.
https://github.com/hsiehshujeng/projen-simple
aws-apigateway aws-cdk aws-cdk-construct aws-step-functions csharp java jsii maven npm nuget projen pypi python typescript
Last synced: 18 days ago
JSON representation
An initial project for projen. It crafts a custom construct by Typescript then publishes the construct into 4 popular programming language repositories, i.e., npm, PyPI, Central Maven, and NuGet.
- Host: GitHub
- URL: https://github.com/hsiehshujeng/projen-simple
- Owner: HsiehShuJeng
- License: apache-2.0
- Created: 2021-05-15T04:21:00.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-13T01:36:17.000Z (24 days ago)
- Last Synced: 2024-10-13T15:02:19.179Z (23 days ago)
- Topics: aws-apigateway, aws-cdk, aws-cdk-construct, aws-step-functions, csharp, java, jsii, maven, npm, nuget, projen, pypi, python, typescript
- Language: TypeScript
- Homepage:
- Size: 4.38 MB
- Stars: 7
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# projen-simple
[![License](https://img.shields.io/badge/License-Apache%202.0-green)](https://opensource.org/licenses/Apache-2.0) ![Release](https://github.com/HsiehShuJeng/projen-simple/workflows/Release/badge.svg) [![npm downloads](https://img.shields.io/npm/dt/projen-statemachine-example?label=npm%20downloads&style=plastic)](https://img.shields.io/npm/dt/projen-statemachine-example?label=npm%20downloads&style=plastic) [![pypi downloads](https://img.shields.io/pypi/dm/scotthsieh-projen-statemachine?label=pypi%20downloads&style=plastic)](https://img.shields.io/pypi/dm/scotthsieh-projen-statemachine?label=pypi%20downloads&style=plastic) [![NuGet downloads](https://img.shields.io/nuget/dt/Projen.Statemachine?label=NuGet%20downloads&style=plastic)](https://img.shields.io/nuget/dt/Projen.Statemachine?label=NuGet%20downloads&style=plastic) [![repo languages](https://img.shields.io/github/languages/count/HsiehShuJeng/projen-simple?label=repo%20languages&style=plastic)](https://img.shields.io/github/languages/count/HsiehShuJeng/projen-simple?label=repo%20languages&style=plastic)| npm (JS/TS) | PyPI (Python) | Maven (Java) | Go | NuGet |
| --- | --- | --- | --- | --- |
| [Link](https://www.npmjs.com/package/projen-simple) | [Link](https://pypi.org/project/scotthsieh_projen_statemachine/) | [Link](https://search.maven.org/artifact/io.github.hsiehshujeng/projen-statemachine) | [Link](https://github.com/HsiehShuJeng/projen-statemachine-go) | [Link](https://www.nuget.org/packages/Projen.Statemachine/) |Build a custom construct based on an example in an AWS Blog post and use [projen](https://github.com/projen/projen) to publish to 5 language repositories, i.e., npm, PyPI, Central Maven, NuGet, and Go.
# Architecture
This library constrcution is referred to the first example in this AWS blog, [*Introducing Amazon API Gateway service integration for AWS Step Functions*](https://aws.amazon.com/tw/blogs/compute/introducing-amazon-api-gateway-service-integration-for-aws-step-functions/) written by Benjanmin Smith. After you deploy the stack with whatever programming language you like, i.e., Typescript, Python, Java, or C sharp, you'll get a view similar to the following diagram:
![image](https://raw.githubusercontent.com/HsiehShuJeng/projen-simple/main/images/designer_view.png)# How to utilize polyglot packages and deploy
## TypeScript
```bash
$ cdk --init language typescript
$ yarn add projen-statemachine-example
```
```typescript
import { StateMachineApiGatewayExample } from 'projen-statemachine-example';export class TypescriptStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);const stageName = 'default';
const partPath = 'pets';
const exampleConstruct = new StateMachineApiGatewayExample(this, 'KerKer', {
stageName: stageName, partPath: partPath});new cdk.CfnOutput(this, 'OStateMachine', {
value: exampleConstruct.stateMachine.stateMachineArn});
new cdk.CfnOutput(this, 'OExecutionOutput', {
value: exampleConstruct.executionInput, description: 'Sample input to StartExecution.'});
}
```
## Python
```bash
$ cdk init --language python
$ cat < requirements.txt
aws-cdk.core
scotthsieh_projen_statemachine
EOL
$ python -m pip install -r requirements.txt
```
```python
from aws_cdk import core as cdk
from scotthsieh_projen_statemachine import StateMachineApiGatewayExampleclass PythonStack(cdk.Stack):
def __init__(self, scope: cdk.Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
stage_name = 'default'
part_path = 'pets'
example_construct = StateMachineApiGatewayExample(
self, 'PythonStatemachne', stage_name=stage_name, part_path=part_path,
)cdk.CfnOutput(self, "OStateMachine",
value=example_construct.state_machine.state_machine_arn
)
cdk.CfnOutput(self, "OExecutionOutput", value=example_construct.execution_input, description="Sample input to StartExecution.")
```
## Java
```bash
$ cdk init --language java
$ mvn package
```
```xml
.
.
UTF-8
2.0.474
2.149.0
5.7.1
.
.
.
.
.
io.github.hsiehshujeng
projen-statemachine
${custom.construct.version}
.
.
.
```
```java
package com.myorg;import software.amazon.awscdk.core.Construct;
import software.amazon.awscdk.core.CfnOutput;
import software.amazon.awscdk.core.CfnOutputProps;
import software.amazon.awscdk.core.Stack;
import software.amazon.awscdk.core.StackProps;
import io.github.hsiehshujeng.projen.statemachine.*;
public class JavaStack extends Stack {
public JavaStack(final Construct scope, final String id) {
this(scope, id, null);
}public JavaStack(final Construct scope, final String id, final StackProps props) {
super(scope, id, props);
String stageName = "default";
String partPath = "pets";
StateMachineApiGatewayExample exampleConstruct = new StateMachineApiGatewayExample(this, "KerKer",
StateMachineApiGatewayExampleProps.builder()
.stageName(stageName)
.partPath(partPath)
.build());new CfnOutput(this, "OStateMachine",
CfnOutputProps.builder()
.value(exampleConstruct.getStateMachine().getStateMachineArn())
.build());
new CfnOutput(this, "OExecutionOutput", CfnOutputProps.builder()
.value(exampleConstruct.getExecutionInput())
.description("Sample input to StartExecution.")
.build());
}
}
```
## C#
```bash
$ cdk init --language csharp
$ dotnet add src/Csharp package Projen.Statemachine --version 2.0.474
```
```cs
using Amazon.CDK;
using ScottHsieh.Examples;
namespace Csharp
{
public class CsharpStack : Stack
{
internal CsharpStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
{
string stageName = "default";
string partPath = "pets";
var exampleConstruct = new StateMachineApiGatewayExample(this, "KerKer", new StateMachineApiGatewayExampleProps
{
StageName = stageName,
PartPath = partPath
});
new CfnOutput(this, "OStateMachine", new CfnOutputProps
{
Value = exampleConstruct.StateMachine.StateMachineArn
});
new CfnOutput(this, "OExecutionOutput", new CfnOutputProps
{
Value = exampleConstruct.ExecutionInput,
Description = "Sample input to StartExecution."
});
}
}
}
```# References
* [jsii reference](https://github.com/cdklabs/jsii-release)
* [aws-cdk-go](https://github.com/aws/aws-cdk-go)
* [jsii](https://github.com/aws/jsii)