{"id":20896365,"url":"https://github.com/denniskniep/provider-temporal","last_synced_at":"2025-09-08T19:35:48.597Z","repository":{"id":213019885,"uuid":"725777541","full_name":"denniskniep/provider-temporal","owner":"denniskniep","description":"Crossplane Temporal.io Provider","archived":false,"fork":false,"pushed_at":"2024-10-02T20:54:32.000Z","size":208,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-11T03:51:49.940Z","etag":null,"topics":["crossplane","crossplane-provider","temporal","temporalio"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denniskniep.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-11-30T21:16:45.000Z","updated_at":"2025-02-11T21:39:39.000Z","dependencies_parsed_at":"2023-12-18T01:25:36.974Z","dependency_job_id":"3ab7547c-d691-455f-9e53-66b8a0ff5809","html_url":"https://github.com/denniskniep/provider-temporal","commit_stats":null,"previous_names":["denniskniep/provider-temporal"],"tags_count":6,"template":false,"template_full_name":"crossplane/provider-template","purl":"pkg:github/denniskniep/provider-temporal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denniskniep%2Fprovider-temporal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denniskniep%2Fprovider-temporal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denniskniep%2Fprovider-temporal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denniskniep%2Fprovider-temporal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denniskniep","download_url":"https://codeload.github.com/denniskniep/provider-temporal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denniskniep%2Fprovider-temporal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274231436,"owners_count":25245585,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["crossplane","crossplane-provider","temporal","temporalio"],"created_at":"2024-11-18T10:35:21.233Z","updated_at":"2025-09-08T19:35:48.573Z","avatar_url":"https://github.com/denniskniep.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Temporal Provider\n\nTemporal Provider is a [Crossplane](https://www.crossplane.io/) provider. It was build based on the [Crossplane Template](https://github.com/crossplane/provider-template). It is used to manage and configure [Temporal](https://temporal.io/). It uses the [Temporal Go SDK](https://github.com/temporalio/sdk-go)\n\n# How to use \nRepository and package:\n```\nxpkg.upbound.io/denniskniep/provider-temporal:\u003cversion\u003e\n```\n\nProvider Credentials:\n```\n{\n  \"HostPort\": \"temporal:7233\"\n}\n```\n\nExample:\n```\napiVersion: pkg.crossplane.io/v1\nkind: Provider\nmetadata:\n  name: provider-temporal\nspec:\n  package: xpkg.upbound.io/denniskniep/provider-temporal:v1.5.0\n  packagePullPolicy: IfNotPresent\n  revisionActivationPolicy: Automatic\n---\napiVersion: v1\nkind: Secret\nmetadata:\n  name: provider-temporal-config-creds\n  namespace: crossplane-system\ntype: Opaque\nstringData:\n  credentials: |\n    {\n      \"HostPort\": \"temporal:7233\"\n    }\n---\napiVersion: temporal.crossplane.io/v1alpha1\nkind: ProviderConfig\nmetadata:\n  name: provider-temporal-config\nspec: \n  credentials:\n    source: Secret\n    secretRef:\n      namespace: crossplane-system\n      name: provider-temporal-config-creds\n      key: credentials  \n```\n\nProvider Credentials without TLS:\n```\n{\n  \"HostPort\": \"temporal:7233\",\n  \"UseTLS\": false\n}\n```\n\nProvider Credentials with TLS:\n```\n{\n  \"HostPort\": \"temporal:7233\",\n  \"UseTLS\": true,\n  \"CACertPem\": \"-----BEGIN CERTIFICATE-----\\nhere insert CA certificate\\n-----END CERTIFICATE-----\",\n  \"CertPem\": \"-----BEGIN CERTIFICATE-----\\nhere insert certificate\\n-----END CERTIFICATE-----\",\n  \"KeyPem\": \"-----BEGIN RSA PRIVATE KEY-----\\nhere insert key\\n-----END RSA PRIVATE KEY-----\"\n}\n```\n\n# Troubleshooting\nCreate a DeploymentRuntimeConfig and set the arg `--debug` on the package-runtime container:\n\n```\napiVersion: pkg.crossplane.io/v1beta1\nkind: DeploymentRuntimeConfig\nmetadata:\n  name: debug-config\nspec:\n  deploymentTemplate:\n    spec:\n      selector: {}\n      template:\n        spec:\n          containers:\n            - name: package-runtime\n              args:\n                - --debug\n---\napiVersion: pkg.crossplane.io/v1\nkind: Provider\nmetadata:\n  name: provider-temporal\nspec:\n  package: xpkg.upbound.io/denniskniep/provider-temporal:v1.5.0\n  packagePullPolicy: IfNotPresent\n  revisionActivationPolicy: Automatic\n  runtimeConfigRef:\n    name: debug-config\n```\n\n# Covered Managed Resources\nCurrently covered Managed Resources:\n- [TemporalNamespace](#temporalnamespace)\n- [SearchAttribute](#searchattribute)\n\n## TemporalNamespace \nA Namespace is a unit of isolation within the Temporal Platform\n\n[temporal docs](https://docs.temporal.io/namespaces) \n\n[temporal cli](https://docs.temporal.io/cli/operator#namespace)\n\nHint: Currently its not possible to name this managed resource simply `Namespace`, because of [this](https://github.com/kubernetes/kubernetes/pull/108382) and [this](https://github.com/crossplane/terrajet/issues/234).\n\nExample:\n```\napiVersion: core.temporal.crossplane.io/v1alpha1\nkind: TemporalNamespace\nmetadata:\n  name: namespace1\nspec:\n  forProvider:\n    name: \"Test1\"\n    description: \"Desc 1\"\n    ownerEmail: \"Test@test.local\"\n    workflowExecutionRetentionDays: 30\n    data:\n      - key1: value1\n      - key2: value2\n    historyArchivalState: \"Disabled\"\n    historyArchivalUri: \"\"\n    visibilityArchivalState: \"Disabled\"\n    visibilityArchivalUri: \"\"\n  providerConfigRef:\n    name: provider-temporal-config\n```\n\n## SearchAttribute\nSearch Attributes enable complex and business-logic-focused search queries for Workflow Executions. These are often queried through the Temporal Web UI, but you can also query from within your Workflow code. For more debugging and monitoring, you might want to add your own domain-specific Search Attributes, such as customerId or numItems, that can serve as useful search filters.\n\n[temporal docs](https://docs.temporal.io/visibility#custom-search-attributes) \n\n[temporal cli](https://docs.temporal.io/cli/operator#search-attribute)\n\n\nExample 1:\n```\napiVersion: core.temporal.crossplane.io/v1alpha1\nkind: SearchAttribute\nmetadata:\n  name: searchattr1\nspec:\n  forProvider:\n    name: \"Test1\"\n    type: \"Keyword\"\n    temporalNamespaceName: \"Test1\"\n  providerConfigRef:\n    name: local-temporal-instance-config\n```\n\n\nExample 2:\n```\napiVersion: core.temporal.crossplane.io/v1alpha1\nkind: SearchAttribute\nmetadata:\n  name: searchattr1\nspec:\n  forProvider:\n    name: \"Test1\"\n    type: \"Keyword\"\n    temporalNamespaceNameRef:\n      name: \"namespace1\"\n  providerConfigRef:\n    name: local-temporal-instance-config\n```\n\n# Contribute\n## Developing\n1. Add new type by running the following command:\n```shell\n  export provider_name=temporal\n  export group=core # lower case e.g. core, cache, database, storage, etc.\n  export type=MyType # Camel casee.g. Bucket, Database, CacheCluster, etc.\n  make provider.addtype provider=${provider_name} group=${group} kind=${type}\n```\n2. Replace the *core* group with your new group in apis/{provider}.go\n3. Replace the *MyType* type with your new type in internal/controller/{provider}.go\n4. Run `make reviewable` to run code generation, linters, and tests. (`make generate` to only run code generation)\n5. Run `make build` to build the provider.\n\nRefer to Crossplane's [CONTRIBUTING.md] file for more information on how the\nCrossplane community prefers to work. The [Provider Development][provider-dev]\nguide may also be of use.\n\n[CONTRIBUTING.md]: https://github.com/crossplane/crossplane/blob/master/CONTRIBUTING.md\n[provider-dev]: https://github.com/crossplane/crossplane/blob/master/contributing/guide-provider-development.md\n\n## Start Debug with local cluster\n* `make dev` starts a fresh KIND cluster\n*  `sudo docker-compose -f tests/docker-compose.yaml up -d` starts temporal environment\n*  debug source code with `.vscode/launch.json`\n*  Apply the CRDs `kubectl apply -f examples` \n\n## Stop Debug with local cluster\n*  `make dev-clean` shutdown the earlier started KIND cluster\n*  `sudo docker-compose -f tests/docker-compose.yaml down -v`\n\n## Tests\nStart temporal environment for tests\n```\nsudo docker-compose -f tests/docker-compose.yaml up \n```\n## TLS\n\nIn case test certificates are expired, run `bash certs/generate-test-certs.sh` and new certificates will be created.\n\nThen, edit `internal/clients/service_test.go` and update the new test certificates to `jsonConfig` after you replace the newlines with `\\n`.\n\n```\nawk 'NR \u003e 1 {printf \"\\\\n\"} {printf \"%s\", $0} END {printf \"\"}' certs/client.pem\nawk 'NR \u003e 1 {printf \"\\\\n\"} {printf \"%s\", $0} END {printf \"\"}' certs/client.key\nawk 'NR \u003e 1 {printf \"\\\\n\"} {printf \"%s\", $0} END {printf \"\"}' certs/ca.cert\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenniskniep%2Fprovider-temporal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenniskniep%2Fprovider-temporal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenniskniep%2Fprovider-temporal/lists"}