├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug.md │ └── user-story.md ├── PULL_REQUEST_TEMPLATE │ └── pull_request_template.md └── workflows │ ├── conventional-commits.yaml │ ├── devcontainer-release.yaml │ ├── devcontainer-test.yaml │ ├── docs.yaml │ ├── main.yaml │ ├── pull-requests.yaml │ └── release-please.yaml ├── .gitignore ├── .release-please-manifest.json ├── Aspirate.sln ├── CHANGELOG.md ├── Directory.Build.props ├── Directory.Build.targets ├── Directory.Packages.props ├── LICENSE.TXT ├── README.md ├── build.cake ├── docs └── Writerside │ ├── c.list │ ├── hi.tree │ ├── redirection-rules.xml │ ├── topics │ ├── Apply-Manifests.md │ ├── Applying-Secrets.md │ ├── Build-Command.md │ ├── Commands.md │ ├── Disable-Secret-Management.md │ ├── General-FAQ.md │ ├── Generate-Command.md │ ├── Generating-Secrets.md │ ├── Getting-Started.md │ ├── Init-Command.md │ ├── Installation-as-a-DevContainer-Feature.md │ ├── Installing-as-a-Global-Tool.md │ ├── Managing-Secrets.md │ ├── Non-Interactive-Invocation.md │ ├── Removing-Aspirate.md │ ├── Removing-Manifests-from-a-Cluster.md │ ├── Run-Command.md │ ├── Secret-Management.md │ └── Secrets-File-Contents.md │ ├── v.list │ └── writerside.cfg ├── dotnet-tools.json ├── ext └── devcontainer │ ├── src │ └── aspirate │ │ ├── README.md │ │ ├── devcontainer-feature.json │ │ └── install.sh │ └── test │ └── aspirate │ └── test.sh ├── nuget.config ├── release-please-config.json ├── renovate.json ├── src ├── Aspirate.Cli │ ├── Aspirate.Cli.csproj │ ├── AspirateCli.cs │ ├── GlobalUsings.cs │ ├── Middleware │ │ └── DependencyInjectionMiddleware.cs │ ├── Program.cs │ ├── Properties │ │ └── launchSettings.json │ ├── ServiceCollectionExtensions.cs │ ├── Templates │ │ ├── dapr-component.hbs │ │ ├── dashboard.hbs │ │ ├── deployment.hbs │ │ ├── kustomization.hbs │ │ ├── namespace.hbs │ │ ├── service.hbs │ │ └── statefulset.hbs │ └── nuget-icon.png ├── Aspirate.Commands │ ├── Actions │ │ ├── ActionExecutor.cs │ │ ├── BaseAction.cs │ │ ├── BaseActionWithNonInteractiveValidation.cs │ │ ├── Configuration │ │ │ ├── AskImagePullPolicyAction.cs │ │ │ ├── AskPrivateRegistryCredentialsAction.cs │ │ │ ├── InitializeConfigurationAction.cs │ │ │ └── LoadConfigurationAction.cs │ │ ├── Containers │ │ │ ├── BuildAndPushContainersFromDockerfilesAction.cs │ │ │ ├── BuildAndPushContainersFromProjectsAction.cs │ │ │ └── PopulateContainerDetailsForProjectsAction.cs │ │ ├── IAction.cs │ │ ├── Manifests │ │ │ ├── ApplyDaprAnnotationsAction.cs │ │ │ ├── ApplyManifestsToClusterAction.cs │ │ │ ├── CustomNamespaceAction.cs │ │ │ ├── GenerateAspireManifestAction.cs │ │ │ ├── GenerateDockerComposeManifestAction.cs │ │ │ ├── GenerateFinalKustomizeManifestAction.cs │ │ │ ├── GenerateHelmChartAction.cs │ │ │ ├── GenerateKustomizeManifestsAction.cs │ │ │ ├── IncludeAspireDashboardAction.cs │ │ │ ├── LoadAspireManifestAction.cs │ │ │ ├── RemoveManifestsFromClusterAction.cs │ │ │ ├── RunKubernetesObjectsAction.cs │ │ │ ├── StopDeployedKubernetesInstanceAction.cs │ │ │ └── SubstituteValuesAspireManifestAction.cs │ │ └── Secrets │ │ │ ├── PopulateInputsAction.cs │ │ │ └── SaveSecretsAction.cs │ ├── Aspirate.Commands.csproj │ ├── Commands │ │ ├── Apply │ │ │ ├── ApplyCommand.cs │ │ │ ├── ApplyCommandHandler.cs │ │ │ └── ApplyOptions.cs │ │ ├── BaseCommand.cs │ │ ├── BaseCommandOptions.cs │ │ ├── BaseCommandOptionsHandler.cs │ │ ├── Build │ │ │ ├── BuildCommand.cs │ │ │ ├── BuildCommandHandler.cs │ │ │ └── BuildOptions.cs │ │ ├── Destroy │ │ │ ├── DestroyCommand.cs │ │ │ ├── DestroyCommandHandler.cs │ │ │ └── DestroyOptions.cs │ │ ├── Generate │ │ │ ├── GenerateCommand.cs │ │ │ ├── GenerateCommandHandler.cs │ │ │ └── GenerateOptions.cs │ │ ├── GenericCommand.cs │ │ ├── Init │ │ │ ├── InitCommand.cs │ │ │ ├── InitCommandHandler.cs │ │ │ └── InitOptions.cs │ │ ├── Run │ │ │ ├── RunCommand.cs │ │ │ ├── RunCommandHandler.cs │ │ │ └── RunOptions.cs │ │ ├── Settings │ │ │ └── SettingsCommand.cs │ │ └── Stop │ │ │ ├── StopCommand.cs │ │ │ ├── StopCommandHandler.cs │ │ │ └── StopOptions.cs │ ├── GlobalUsings.cs │ ├── Options │ │ ├── AllowClearNamespaceOption.cs │ │ ├── AspireManifestOption.cs │ │ ├── BaseOption.cs │ │ ├── ComponentsOption.cs │ │ ├── ComposeBuildsOption.cs │ │ ├── ContainerBuildArgsOption.cs │ │ ├── ContainerBuildContextOption.cs │ │ ├── ContainerBuilderOption.cs │ │ ├── ContainerImageTagOption.cs │ │ ├── ContainerRegistryOption.cs │ │ ├── ContainerRepositoryPrefixOption.cs │ │ ├── DisableSecretsOption.cs │ │ ├── DisableStateOption.cs │ │ ├── IBaseOption.cs │ │ ├── ImagePullPolicyOption.cs │ │ ├── IncludeDashboardOption.cs │ │ ├── InputPathOption.cs │ │ ├── KubernetesContextOption.cs │ │ ├── LaunchProfileOption.cs │ │ ├── NamespaceOption.cs │ │ ├── NonInteractiveOption.cs │ │ ├── OutputFormatOption.cs │ │ ├── OutputPathOption.cs │ │ ├── ParameterResourceValueOption.cs │ │ ├── PreferDockerfileOption.cs │ │ ├── PrivateRegistryEmailOption.cs │ │ ├── PrivateRegistryOption.cs │ │ ├── PrivateRegistryPasswordOption.cs │ │ ├── PrivateRegistryUrlOption.cs │ │ ├── PrivateRegistryUsernameOption.cs │ │ ├── ProjectPathOption.cs │ │ ├── ReplaceSecretsOption.cs │ │ ├── RollingRestartOption.cs │ │ ├── RuntimeIdentifierOption.cs │ │ ├── SecretPasswordOption.cs │ │ ├── SkipBuildOption.cs │ │ ├── SkipFinalKustomizeGenerationOption.cs │ │ └── TemplatePathOption.cs │ └── ServiceCollectionExtensions.cs ├── Aspirate.Processors │ ├── Aspirate.Processors.csproj │ ├── BaseResourceProcessor.cs │ ├── FinalProcessor.cs │ ├── GlobalUsings.cs │ ├── Resources │ │ ├── AbstractProcessors │ │ │ ├── BaseContainerProcessor.cs │ │ │ ├── ContainerProcessor.cs │ │ │ ├── ContainerV1Processor.cs │ │ │ ├── ParameterProcessor.cs │ │ │ └── ValueProcessor.cs │ │ ├── Dapr │ │ │ ├── DaprComponentProcessor.cs │ │ │ ├── DaprComponentTemplateData.cs │ │ │ └── DaprProcessor.cs │ │ ├── Dockerfile │ │ │ └── DockerfileProcessor.cs │ │ └── Project │ │ │ ├── BaseProjectProcessor.cs │ │ │ ├── ProjectProcessor.cs │ │ │ └── ProjectV1Processor.cs │ ├── ServiceCollectionExtensions.cs │ └── Transformation │ │ ├── Bindings │ │ ├── BindingProcessor.cs │ │ └── IBindingProcessor.cs │ │ ├── IResourceExpressionProcessor.cs │ │ ├── Json │ │ ├── IJsonExpressionProcessor.cs │ │ ├── IJsonInterpolationUnescapeProcessor.cs │ │ ├── JsonExpressionProcessor.cs │ │ ├── JsonInterpolation.cs │ │ └── JsonInterpolationUnescapeProcessor.cs │ │ ├── Literals.cs │ │ └── ResourceExpressionProcessor.cs ├── Aspirate.Secrets │ ├── AesGcmCrypter.cs │ ├── Aspirate.Secrets.csproj │ ├── GlobalUsings.cs │ ├── MaskedValue.cs │ ├── Protectors │ │ ├── BaseProtector.cs │ │ ├── ConnectionStringProtector.cs │ │ ├── MsSqlPasswordProtector.cs │ │ └── PostgresPasswordProtector.cs │ ├── SecretProvider.cs │ └── ServiceCollectionExtensions.cs ├── Aspirate.Services │ ├── Aspirate.Services.csproj │ ├── GlobalUsings.cs │ ├── Implementations │ │ ├── AspirateConfigurationService.cs │ │ ├── AspireManifestCompositionService.cs │ │ ├── ContainerCompositionService.cs │ │ ├── ContainerDetailsService.cs │ │ ├── DaprCliService.cs │ │ ├── HelmChartCreator.cs │ │ ├── KubeCtlService.cs │ │ ├── KubernetesService.cs │ │ ├── KustomizeService.cs │ │ ├── ManifestFileParserService.cs │ │ ├── ManifestWriter.cs │ │ ├── PasswordGenerator.cs │ │ ├── ProjectPropertyService.cs │ │ ├── SecretService.cs │ │ ├── ShellExecutionService.cs │ │ ├── StateService.cs │ │ └── VersionCheckService.cs │ └── ServiceCollectionExtensions.cs └── Aspirate.Shared │ ├── Aspirate.Shared.csproj │ ├── Attributes │ └── RestorableStatePropertyAttribute.cs │ ├── Enums │ ├── ContainerBuilder.cs │ ├── ExistingSecretsType.cs │ ├── ImagePullPolicy.cs │ ├── OutputType.cs │ └── ProtectorType.cs │ ├── Exceptions │ └── ActionCausesExitException.cs │ ├── Extensions │ ├── AnsiConsoleExtensions.cs │ ├── AspirateStateExtensions.cs │ ├── ComposeExtensions.cs │ ├── DockerfileParametersExtensions.cs │ ├── JsonExtensions.cs │ ├── KubernetesDeploymentDataExtensions.cs │ ├── PathExtensions.cs │ ├── ProtectionStrategyExtensions.cs │ ├── ResourceExtensions.cs │ └── StringExtensions.cs │ ├── GlobalUsings.cs │ ├── Inputs │ ├── BaseCreateOptions.cs │ ├── BaseKubernetesCreateOptions.cs │ ├── ContainerOptions.cs │ ├── CreateComposeEntryOptions.cs │ ├── CreateKubernetesObjectsOptions.cs │ ├── CreateManifestsOptions.cs │ ├── KubernetesRunOptions.cs │ ├── SecretManagementOptions.cs │ ├── ShellCommandOptions.cs │ └── StateManagementOptions.cs │ ├── Interfaces │ ├── Commands │ │ ├── Contracts │ │ │ ├── IApplyOptions.cs │ │ │ ├── IAspireOptions.cs │ │ │ ├── IBuildOptions.cs │ │ │ ├── IComponentsOptions.cs │ │ │ ├── IContainerOptions.cs │ │ │ ├── IDashboardOptions.cs │ │ │ ├── IGenerateOptions.cs │ │ │ ├── IInitOptions.cs │ │ │ ├── IKubernetesOptions.cs │ │ │ ├── IPrivateRegistryCredentialsOptions.cs │ │ │ ├── IRunOptions.cs │ │ │ └── ISecretState.cs │ │ ├── ICommandOptions.cs │ │ └── ICommandOptionsHandler.cs │ ├── Processors │ │ ├── IImageProcessor.cs │ │ └── IResourceProcessor.cs │ ├── Secrets │ │ ├── IDecrypter.cs │ │ ├── IEncrypter.cs │ │ ├── IPasswordGenerator.cs │ │ └── ISecretProvider.cs │ └── Services │ │ ├── IAspirateConfigurationService.cs │ │ ├── IAspireManifestCompositionService.cs │ │ ├── IContainerCompositionService.cs │ │ ├── IContainerDetailsService.cs │ │ ├── IDaprCliService.cs │ │ ├── IHelmChartCreator.cs │ │ ├── IKubeCtlService.cs │ │ ├── IKubernetesService.cs │ │ ├── IKustomizeService.cs │ │ ├── IManifestFileParserService.cs │ │ ├── IManifestWriter.cs │ │ ├── IProjectPropertyService.cs │ │ ├── IProtectionStrategy.cs │ │ ├── ISecretService.cs │ │ ├── IShellExecutionService.cs │ │ ├── IStateService.cs │ │ └── IVersionCheckService.cs │ ├── Literals │ ├── AspirateLiterals.cs │ ├── AspirateSecretLiterals.cs │ ├── AspireComponentLiterals.cs │ ├── AspireLiterals.cs │ ├── ContainerBuilderLiterals.cs │ ├── DockerLiterals.cs │ ├── DotNetSdkLiterals.cs │ ├── EmojiLiterals.cs │ ├── KubeCtlLiterals.cs │ ├── MsBuildPropertiesLiterals.cs │ └── TemplateLiterals.cs │ ├── Models │ ├── ArgumentsBuilder.cs │ ├── Aspirate │ │ ├── AspirateContainerSettings.cs │ │ ├── AspirateSettings.cs │ │ ├── AspirateState.cs │ │ ├── ComposeService.cs │ │ ├── KubernetesDeploymentData.cs │ │ ├── LastVersionChecked.cs │ │ └── SecretState.cs │ ├── AspireManifests │ │ ├── AspireDashboard.cs │ │ ├── Components │ │ │ ├── Common │ │ │ │ ├── Binding.cs │ │ │ │ ├── Build.cs │ │ │ │ ├── Container │ │ │ │ │ └── ContainerResourceBase.cs │ │ │ │ ├── ProjectResource.cs │ │ │ │ └── Volume.cs │ │ │ ├── UnsupportedResource.cs │ │ │ ├── V0 │ │ │ │ ├── Container │ │ │ │ │ └── ContainerResource.cs │ │ │ │ ├── Dapr │ │ │ │ │ ├── ComponentMetadata.cs │ │ │ │ │ ├── DaprComponentResource.cs │ │ │ │ │ ├── DaprResource.cs │ │ │ │ │ └── InnerDaprComponent.cs │ │ │ │ ├── DockerfileResource.cs │ │ │ │ ├── Parameters │ │ │ │ │ ├── Generate.cs │ │ │ │ │ ├── ParameterDefault.cs │ │ │ │ │ ├── ParameterInput.cs │ │ │ │ │ ├── ParameterResource.cs │ │ │ │ │ └── ValueResource.cs │ │ │ │ └── Ports.cs │ │ │ └── V1 │ │ │ │ └── Container │ │ │ │ └── ContainerV1Resource.cs │ │ ├── Interfaces │ │ │ ├── IResource.cs │ │ │ ├── IResourceWithAnnotations.cs │ │ │ ├── IResourceWithArgs.cs │ │ │ ├── IResourceWithBinding.cs │ │ │ ├── IResourceWithConnectionString.cs │ │ │ ├── IResourceWithEnvironmentalVariables.cs │ │ │ ├── IResourceWithInput.cs │ │ │ ├── IResourceWithParent.cs │ │ │ ├── IResourceWithValue.cs │ │ │ └── IResourceWithVolumes.cs │ │ └── Resource.cs │ ├── Compose │ │ ├── ComposeService.cs │ │ └── ComposeServiceBuilder.cs │ ├── Kubernetes │ │ ├── DockerAuth.cs │ │ ├── DockerAuthSecretData.cs │ │ ├── DockerConfigJson.cs │ │ ├── ImagePullSecret.cs │ │ ├── Secret.cs │ │ ├── SecretData.cs │ │ └── SecretMetadata.cs │ └── MsBuild │ │ ├── BaseMsBuildProperties.cs │ │ ├── MsBuildContainerProperties.cs │ │ └── MsBuildProperties.cs │ └── Outputs │ ├── CommandAvailableResult.cs │ └── ShellCommandResult.cs └── tests └── Aspirate.Tests ├── ActionsTests ├── ActionExecutorTests.cs ├── BaseActionTests.cs ├── Configuration │ ├── InitializeConfigurationActionTests.cs │ ├── LoadConfigurationActionTests.cs │ └── VerifyResults │ │ └── InitializeConfigurationActionTests.ExecuteInitializeConfigurationAction_InteractiveMode_Success.verified.txt ├── Containers │ └── PopulateContainerDetailsForProjectsActionTests.cs ├── Manifests │ ├── ApplyManifestsToClusterActionTests.cs │ ├── GenerateAspireManifestActionTests.cs │ ├── GenerateDockerComposeManifestActionTests.cs │ ├── GenerateKustomizeManifestsActionTests.cs │ ├── LoadAspireManifestActionTests.cs │ └── RemoveManifestsToClusterActionTests.cs └── Secrets │ ├── PopulateInputsActionTests.cs │ └── SaveSecretsActionTests.cs ├── Aspirate.Tests.csproj ├── AspirateTestBase.cs ├── DockerComposeTests ├── DockerComposeBuilderTests.cs └── VerifyResults │ ├── DockerComposeBuilderTests.SerializeComposeFile_Empty_ShouldBeValid.verified.txt │ ├── DockerComposeBuilderTests.SerializeComposeFile_WithBuildArguments_ShouldBeValid.verified.txt │ ├── DockerComposeBuilderTests.SerializeComposeFile_WithDockerfile_ShouldBeValid.verified.txt │ ├── DockerComposeBuilderTests.SerializeComposeFile_WithExposedPort_ShouldBeValid.verified.txt │ ├── DockerComposeBuilderTests.SerializeComposeFile_WithExposedPorts_ShouldBeValid.verified.txt │ ├── DockerComposeBuilderTests.SerializeComposeFile_WithImage_ShouldBeValid.verified.txt │ └── DockerComposeBuilderTests.SerializeComposeFile_WithPrivillegedService_ShouldBeValid.verified.txt ├── ExtensionTests └── KubernetesDeploymentDataExtensionTests.cs ├── GlobalUsings.cs ├── ProcessorTests ├── ContainerProcessorTests.cs └── JsonInterpolationTests.cs ├── SecretTests ├── MaskedValueTests.cs └── SecretProviderTests.cs ├── ServiceTests ├── AspirateConfigurationServiceTest.cs ├── BaseServiceTests.cs ├── ContainerCompositionServiceTest.cs ├── ContainerDetailsServiceTests.cs ├── ContainerOptionsTests.cs ├── KubeCtlServiceTests.cs ├── ManifestFileParserServiceTests.cs ├── ProjectPropertyServiceTests.cs ├── SecretServiceTests.cs └── VerifyResults │ ├── AspirateConfigurationServiceTest.LoadConfigurationFile_ReturnsExpectedObject_WhenConfigurationFileExists.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=FullResponse.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=FullResponseWithDockerfileAndContext.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=FullResponseWithPrefix.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoImageOrTagShouldBeRepositoryLatest.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoImageOrTagShouldBeRepositoryWithPrefixLatest.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoImageShouldBeRepository.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoImageShouldBeRepositoryWithPrefix.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoRegistryOrRepositoryOrTagShouldBeImageLatest.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoRepositoryOrTagShouldBeImageLatest.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoRepositoryShouldBeImage.verified.txt │ ├── ContainerDetailsServiceTests.GetContainerDetails_WhenCalled_ReturnsCorrectContainerDetails_properties=NoTagShouldBeLatest.verified.txt │ ├── ContainerOptionsTests.ContainerParametersFullyPopulated_ShouldPopulateImageCorrectly_testOptions=FullParameters.verified.txt │ ├── ContainerOptionsTests.ContainerParametersFullyPopulated_ShouldPopulateImageCorrectly_testOptions=ImageAndTag.verified.txt │ └── ContainerOptionsTests.ContainerParametersFullyPopulated_ShouldPopulateImageCorrectly_testOptions=RegistryAndPrefixAndImage.verified.txt └── TestData ├── Program.cs ├── TestApp.csproj ├── connectionstring-resource-expression.json ├── nodejs.json ├── pg-endtoend.json ├── project-no-binding.json ├── shop.json ├── sqlserver-endtoend.json ├── starter-with-db.json ├── starter-with-redis.json └── with-unsupported-resource.json /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################### 2 | # Git Line Endings # 3 | ############################### 4 | 5 | # Set default behavior to automatically normalize line endings. 6 | * text=auto 7 | 8 | # Force batch scripts to always use CRLF line endings so that if a repo is accessed 9 | # in Windows via a file share from Linux, the scripts will work. 10 | *.{cmd,[cC][mM][dD]} text eol=crlf 11 | *.{bat,[bB][aA][tT]} text eol=crlf 12 | 13 | # Force bash scripts to always use LF line endings so that if a repo is accessed 14 | # in Unix via a file share from Windows, the scripts will work. 15 | *.sh text eol=lf 16 | 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 🔥 Bug 3 | about: Something that needs fixing. 4 | title: "" 5 | labels: "Type: Bug" 6 | assignees: "" 7 | 8 | --- 9 | 10 | ### 🔥 Bug Description 11 | A clear and concise description of what the bug is. 12 | 13 | ### 🔍 Steps to Reproduce the Bug 14 | 1. Go to '...' 15 | 2. Click on '....' 16 | 3. Scroll down to '....' 17 | 4. See error 18 | 19 | ### 🧯 Possible Solution 20 | * Usefull tips or places to start go here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/user-story.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 🚀 Technical Story 3 | about: An improvement to the project from a user or technical perspective. 4 | title: "" 5 | labels: "Type: Story" 6 | assignees: "" 7 | 8 | --- 9 | 10 | ### 🚀 Feature Description 11 | As a [user role], I'd like to [improvement description], in order to [value this improvement adds]. 12 | 13 | ### ✔ Goals 14 | - [ ] Create a button for X in Y 15 | - [ ] Add an input field for Z 16 | - [ ] Refactor class W 17 | 18 | ### 🧰 Possible Solution 19 | - Usefull tips or places to start go here. 20 | 21 | ### 🚧 Blocked by 22 | - #666 - creation of fields in X 23 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ### 🚀 Feature Description 2 | This PR introduces [feature description]. This resolves #1337. 3 | 4 | ### 🧰 Technical Solution 5 | - [x] Change this to that 6 | - [x] Add something in some file 7 | - [x] Add a library to do some magic 8 | 9 | ### ⚠️ Known Issues 10 | - Introduces some weird bug (#666) which needs to be fixed before merging this! 11 | - All documents are now missing (#404) 12 | 13 | ======================================================= 14 | 15 | ### 🧯 Bugfix Description 16 | This PR fixes [bug description]. This resolves #1234. 17 | 18 | ### 🧰 Technical Solution 19 | - [x] Change this to that 20 | - [x] Add something in some file 21 | 22 | ======================================================= 23 | 24 | ### ⚠️ Breaking Changes 25 | - #500 - Public api endpoint returns different structure 26 | - #501 - Public method signature changed in some file 27 | 28 | ### 🚀 New Features 29 | - #337 - Fancy new feature 1 30 | - #666 - Feature 2 31 | 32 | ### 🧯 Bugfixes 33 | - #666 - Fixed random crashes 34 | - #404 - Documents can now be found again 35 | -------------------------------------------------------------------------------- /.github/workflows/conventional-commits.yaml: -------------------------------------------------------------------------------- 1 | name: Conventional Commits 2 | 3 | on: 4 | pull_request: 5 | branches: [ main ] 6 | 7 | jobs: 8 | build: 9 | name: Conventional Commits 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4.2.2 13 | - uses: webiny/action-conventional-commits@v1.3.0 14 | with: 15 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/devcontainer-release.yaml: -------------------------------------------------------------------------------- 1 | name: Release dev container image 2 | 3 | env: 4 | IMAGE_NAME: ${{ github.repository }} 5 | REGISTRY: ghcr.io 6 | 7 | on: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | call-workflow-test: 12 | uses: ./.github/workflows/devcontainer-test.yaml 13 | 14 | deploy: 15 | needs: 16 | - call-workflow-test 17 | if: ${{ github.ref == 'refs/heads/main' }} 18 | runs-on: ubuntu-latest 19 | permissions: 20 | contents: write 21 | packages: write 22 | pull-requests: write 23 | environment: 24 | name: deploy-devcontainer-feature 25 | steps: 26 | - uses: actions/checkout@v3 27 | 28 | - name: "Publish Features" 29 | uses: devcontainers/action@v1 30 | with: 31 | publish-features: "true" 32 | base-path-to-features: "./ext/devcontainer/src" 33 | generate-docs: "false" 34 | 35 | env: 36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -------------------------------------------------------------------------------- /.github/workflows/devcontainer-test.yaml: -------------------------------------------------------------------------------- 1 | name: Test dev container 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | paths: 6 | - "ext/devcontainer/**" 7 | - ".github/workflows/devcontainer-test.yaml" 8 | branches: [main] 9 | workflow_call: 10 | 11 | jobs: 12 | test: 13 | runs-on: ubuntu-latest 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | baseImage: 18 | [ 19 | "mcr.microsoft.com/devcontainers/dotnet", 20 | ] 21 | steps: 22 | - uses: actions/checkout@v3 23 | 24 | - name: "Install latest devcontainer CLI" 25 | run: npm install -g @devcontainers/cli 26 | 27 | - name: "Generating tests for 'aspirate' against '${{ matrix.baseImage }}'" 28 | run: devcontainer features test -f aspirate -i ${{ matrix.baseImage }} . 29 | working-directory: ./ext/devcontainer 30 | 31 | test-scenarios: 32 | runs-on: ubuntu-latest 33 | steps: 34 | - uses: actions/checkout@v3 35 | 36 | - name: "Install latest devcontainer CLI" 37 | run: npm install -g @devcontainers/cli 38 | 39 | - name: "Testing 'aspirate' scenarios" 40 | run: devcontainer features test -f aspirate --skip-autogenerated . 41 | working-directory: ./ext/devcontainer 42 | 43 | test-global: 44 | runs-on: ubuntu-latest 45 | steps: 46 | - uses: actions/checkout@v3 47 | 48 | - name: "Install latest devcontainer CLI" 49 | run: npm install -g @devcontainers/cli 50 | 51 | - name: "Testing global scenarios" 52 | run: devcontainer features test --global-scenarios-only . 53 | working-directory: ./ext/devcontainer -------------------------------------------------------------------------------- /.github/workflows/main.yaml: -------------------------------------------------------------------------------- 1 | name: Main CI-CD 2 | 3 | env: 4 | NUGET_SERVER: https://api.nuget.org/v3/index.json 5 | NUGET_API_KEY: ${{ secrets.PUBLIC_NUGET_TOKEN }} 6 | DOTNET_NOLOGO: true 7 | DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true 8 | DOTNET_CLI_TELEMETRY_OPTOUT: true 9 | CAKE_SETTINGS_SKIPVERIFICATION: true 10 | 11 | on: 12 | push: 13 | tags: 14 | - "*" 15 | 16 | jobs: 17 | build-test-pull-request: 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v3 22 | with: 23 | fetch-depth: 0 24 | 25 | - uses: actions/setup-dotnet@v3 26 | with: 27 | dotnet-version: '9.0.x' 28 | 29 | - name: Build, Test and Pack 30 | run: | 31 | dotnet tool restore 32 | dotnet cake --pack true --settings_skipverification=true 33 | 34 | - name: Push to nuget 35 | working-directory: artifacts/ 36 | run: dotnet nuget push *.nupkg -s $NUGET_SERVER -k $NUGET_API_KEY -------------------------------------------------------------------------------- /.github/workflows/pull-requests.yaml: -------------------------------------------------------------------------------- 1 | name: Pull Requests 2 | 3 | env: 4 | DOTNET_NOLOGO: true 5 | DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true 6 | DOTNET_CLI_TELEMETRY_OPTOUT: true 7 | CAKE_SETTINGS_SKIPVERIFICATION: true 8 | 9 | on: 10 | - pull_request 11 | 12 | jobs: 13 | build-test-pull-request: 14 | runs-on: ubuntu-latest 15 | 16 | steps: 17 | - uses: actions/checkout@v3 18 | with: 19 | fetch-depth: 0 20 | 21 | - uses: actions/setup-dotnet@v3 22 | with: 23 | dotnet-version: '9.0.x' 24 | 25 | - name: Build and Test 26 | run: | 27 | dotnet tool restore 28 | dotnet cake 29 | -------------------------------------------------------------------------------- /.github/workflows/release-please.yaml: -------------------------------------------------------------------------------- 1 | name: "Release Please" 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | workflow_dispatch: 8 | 9 | permissions: 10 | contents: write 11 | pull-requests: write 12 | 13 | jobs: 14 | release-please: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: googleapis/release-please-action@v4 18 | with: 19 | token: ${{ secrets.RELEASE_PLEASE_TOKEN }} -------------------------------------------------------------------------------- /.release-please-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | ".": "9.1.0" 3 | } 4 | -------------------------------------------------------------------------------- /Directory.Build.props: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | $(NoWarn);NU5104 6 | true 7 | true 8 | true 9 | $(OutputPath)$(AssemblyName).xml 10 | true 11 | enable 12 | enable 13 | false 14 | true 15 | 16 | 17 | -------------------------------------------------------------------------------- /Directory.Build.targets: -------------------------------------------------------------------------------- 1 | 2 | 3 | $(OutputPath)$(AssemblyName).xml 4 | 5 | -------------------------------------------------------------------------------- /LICENSE.TXT: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) David Sekula 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. -------------------------------------------------------------------------------- /docs/Writerside/c.list: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/Writerside/hi.tree: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /docs/Writerside/redirection-rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | Created after removal of "Environmental Variables" from Aspir8: Aspire to Deployments 11 | Environmental-Variables.html 12 | 13 | -------------------------------------------------------------------------------- /docs/Writerside/topics/Apply-Manifests.md: -------------------------------------------------------------------------------- 1 | # Applying Manifests to a Cluster 2 | 3 | To apply the manifests to your cluster, run: 4 | 5 | ```bash 6 | aspirate apply 7 | ``` 8 | 9 | You will first be presented with all the context names (unless you have passed one in as a cli option) in your kubeconfig file, and will be asked to select one. 10 | This will be used for deployment 11 | 12 | If you have a secret file, you will be prompted to enter the password to decrypt it. 13 | 14 | ## Cli Options (Optional) 15 | 16 | | Option | Alias | Environmental Variable Counterpart | Description | 17 | |-------------------|-------|------------------------------------|-----------------------------------------------------------------------------------------------------| 18 | | --input-path | -i | `ASPIRATE_INPUT_PATH` | The path for the kustomize manifests directory. Defaults to `%output-dir%` | 19 | | --kube-context | -k | `ASPIRATE_KUBERNETES_CONTEXT` | The name of the kubernetes context within your kubeconfig to apply / deploy manifests to. | 20 | | --secret-password | | `ASPIRATE_SECRET_PASSWORD` | If using secrets, or you have a secret file - Specify the password to decrypt them | 21 | | --non-interactive | | `ASPIRATE_NON_INTERACTIVE` | Disables interactive mode for the command | 22 | | --disable-secrets | | `ASPIRATE_DISABLE_SECRETS` | Disables secrets management features. | 23 | | --rolling-restart | -r | `ASPIRATE_ROLLING_RESTART` | Perform a rollout restart of deployments directly after applying the manifests. Defaults to `false` | -------------------------------------------------------------------------------- /docs/Writerside/topics/Applying-Secrets.md: -------------------------------------------------------------------------------- 1 | # Applying Secrets 2 | 3 | The `apply` command is used to apply the manifests to the cluster. 4 | 5 | See [Applying Manifests to a Cluster](Apply-Manifests.md) for more information. -------------------------------------------------------------------------------- /docs/Writerside/topics/Commands.md: -------------------------------------------------------------------------------- 1 | # Commands 2 | 3 | > **Note** 4 | > 5 | > For best results - %product% should be run from the root of your aspire project (AppHost directory). 6 | > 7 | {style="note"} 8 | 9 | %product% is a Cli-driven application, and as such, has a number of commands that can be used to perform various tasks. 10 | 11 | The pages in this section will go into detail about each command, and how to use them. 12 | All the cli options listed in tables on each page are optional, and will default to the values allowing %product% prompting the user for input. -------------------------------------------------------------------------------- /docs/Writerside/topics/Disable-Secret-Management.md: -------------------------------------------------------------------------------- 1 | # Disable Secret Management 2 | 3 | If secrets are not required, the `--disable-secrets` flag can be passed to all commands to disable secret functionality. 4 | 5 | However, once manifests are generated with secrets included, they cannot be disabled without regenerating the manifests. 6 | 7 | ## Example 8 | 9 | ```bash 10 | aspirate generate --disable-secrets 11 | ``` -------------------------------------------------------------------------------- /docs/Writerside/topics/General-FAQ.md: -------------------------------------------------------------------------------- 1 | # General / FAQ 2 | 3 | ## Configuring the Windows Terminal For Unicode and Emoji Support 4 | 5 | Windows Terminal supports Unicode and Emoji. However, the shells such as Powershell and cmd.exe do not. 6 | For the difference between the two, 7 | see [What's the difference between a console, 8 | a terminal and a shell](https://www.hanselman.com/blog/whats-the-difference-between-a-console-a-terminal-and-a-shell). 9 | 10 | For PowerShell, the following command will enable Unicode and Emoji support. You can add this to your `profile.ps1` 11 | file: 12 | 13 | ```bash 14 | [console]::InputEncoding = [console]::OutputEncoding = [System.Text.UTF8Encoding]::new() 15 | ``` 16 | 17 | For cmd.exe, the following steps are required to enable Unicode and Emoji support. 18 | 19 | 1. Run `intl.cpl`. 20 | 2. Click the Administrative tab 21 | 3. Click the Change system locale button. 22 | 4. Check the "Use Unicode UTF-8 for worldwide language support" checkbox. 23 | 5. Reboot. 24 | 25 | You will also need to ensure that your Console application is configured to use a font that supports Unicode and Emoji, 26 | such as Cascadia Code. 27 | -------------------------------------------------------------------------------- /docs/Writerside/topics/Generating-Secrets.md: -------------------------------------------------------------------------------- 1 | # Generating Secrets 2 | 3 | The `generate` command is used to generate secrets for the application. 4 | After containers and projects have been build and pushed, if there are any protectable configuration values within the aspire manifest, secret generation will commence. 5 | 6 | If you do not already have existing secrets, you will be prompted to enter a password to encrypt the secrets with. 7 | You will have to enter this twice, once to confirm the password. 8 | This password will be used to encrypt the secrets, and parameter resources and will be required to decrypt them. Please keep this password safe. 9 | 10 | If you already have existing secrets, you will be prompted to enter the password used to encrypt them. 11 | You have three chances to enter the correct password, after which the generation process will be aborted. 12 | 13 | If you already have existing secrets, they will be reused unless `--replace-secrets` is passed as a cli option. 14 | 15 | After secrets have been generated, they will be encrypted and stored in the `aspirate-state.json` file. 16 | The `generate` command will then move on to manifest generation. -------------------------------------------------------------------------------- /docs/Writerside/topics/Getting-Started.md: -------------------------------------------------------------------------------- 1 | # Aspir8 2 | 3 | ![icon](https://github.com/prom3theu5/aspirational-manifests/assets/1518610/5f4402e9-6f2c-4ca4-b457-206fb8233155) 4 | 5 | [![NuGet](https://img.shields.io/nuget/v/aspirate.svg)](https://www.nuget.org/packages/aspirate/) 6 | [![NuGet](https://img.shields.io/nuget/dt/aspirate.svg)](https://www.nuget.org/packages/aspirate/) 7 | 8 | Generate deployment yaml for a .NET Aspire AppHost project. 9 | 10 |