{"id":19519160,"url":"https://github.com/temperlang/temper","last_synced_at":"2026-04-25T07:04:32.515Z","repository":{"id":195603494,"uuid":"677199382","full_name":"temperlang/temper","owner":"temperlang","description":"A programming language for libraries translated to all the others","archived":false,"fork":false,"pushed_at":"2026-03-30T17:19:34.000Z","size":15596,"stargazers_count":118,"open_issues_count":159,"forks_count":5,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-03-30T18:23:57.826Z","etag":null,"topics":["distributed-systems","interoperability","programming-language","reliability-engineering","translation"],"latest_commit_sha":null,"homepage":"https://temperlang.dev/","language":"Kotlin","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/temperlang.png","metadata":{"files":{"readme":"README-extra.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"supported-backends/build.gradle","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":"COPYRIGHT","agents":null,"dco":null,"cla":null}},"created_at":"2023-08-11T01:42:51.000Z","updated_at":"2026-03-30T16:31:42.000Z","dependencies_parsed_at":"2024-11-11T00:16:39.647Z","dependency_job_id":"cc1cd23a-6a0a-4212-90a4-9fe9b0f3c2e0","html_url":"https://github.com/temperlang/temper","commit_stats":null,"previous_names":["temperlang/temper"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/temperlang/temper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temperlang%2Ftemper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temperlang%2Ftemper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temperlang%2Ftemper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temperlang%2Ftemper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/temperlang","download_url":"https://codeload.github.com/temperlang/temper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/temperlang%2Ftemper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291132,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["distributed-systems","interoperability","programming-language","reliability-engineering","translation"],"created_at":"2024-11-11T00:16:37.249Z","updated_at":"2026-04-01T19:28:23.613Z","avatar_url":"https://github.com/temperlang.png","language":"Kotlin","readme":"# Extra content\n\n## Minimal steps to creating a new subproject\n\nTerminology note: [according to Gradle](https://docs.gradle.org/current/userguide/multi_project_builds.html), this\nis a \"multi-project build\" with a \"root project\" and many \"subprojects.\" IntelliJ says it's a \"project\" with many\n\"modules.\" We're using Gradle's terminology since it's the source of truth.\n\nWe'll go over a checklist of items to set up `new-subproject`. This isn't meant to be all-inclusive, but\nhopefully it will save you thirty minutes of staring at Gradle errors.\n\n1. In `settings.gradle` add `include ':new-subproject'` to the list of includes.\n2. Make the directory `new-subproject`.\n3. Copy a `build.gradle` file for either a multi-platform project or a jvm project.\n   * To see what existing subprojects are, look for `ext.temperProject`\n   * That's an external (gradle's term for user-defined) setting\n   * That's used in the `afterEvaluate` clause in the root `build.gradle` to do some common configuration.\n   * TODO: factor that logic into a local gradle plugin\n\n### Verifying\n\nBesides creating a dummy function and a test, you'll want to check that IntelliJ accepts this project.\n\nIn IntelliJ, go to either gradle file you're editing and click the gradle elephant to sync.\n   * The Project view should show your subproject, and mousing over it should indicate it's a Module.\n   * Open File / Project Structure, compare your subproject to others\n   * Check all three tabs, Sources, Paths, Dependencies and make sure they make sense.\n\n## Signing git commits\n\nTemper uses Github's [vigilant mode][] which prefers signed commits. When it's working, you should see a shiny green\n\"Verified\" sticker next to your commits.\n\nA point of confusion is managing all these keys. You can have a key in the web interface that's different from your\ndevice, and most people submit pull requests from the web interface.\n\nThat means you can commit using a GPG key loaded in your Github profile, and not notice that your local device isn't\nconfigured.\n\n### Additional reading\n\nThis isn't intended to be a comprehensive guide, and you may find you're able to skim all of this and just run the\ncommands. If you run into issues:\n\n* [Github generating a GPG key][]\n* [Github signature verification][]\n* [Signing Your Work][]\n\n### Setting up a GPG key\n\nSee the github docs, but generally you just want to do this to get prompted for everything. We recommend that you\nhave one key corresponding to your email address.\n\n```bash\n$ gpg --full-generate-key\n```\n\nThen [add it to your Github account][adding-GPG-key].\n\n### Selecting your git key\n\nYou can safely skip most of this section and go to the last part where you confirm that your email selects the key\nyou just generated.\n\nYou need to set your signing key in your git config. We'll briefly excerpt some man pages that may help you understand\nwhat's going on:\n\n```\n$ man git-commit\n    -S[\u003ckeyid\u003e], --gpg-sign[=\u003ckeyid\u003e], --no-gpg-sign\n           GPG-sign commits. The keyid argument is optional and defaults to the committer identity ...\n\n$ man git-config\n     user.signingKey\n         ... you can override the default selection with this variable. This option is passed unchanged to gpg’s\n         --local-user parameter, so you may specify a key using any method that gpg supports. ...\n\n$ man gpg\n     --sign\n        ... The signing key is chosen by default or can be set explicitly using the --local-user and --default-key\n        options.\n```\n\nYou can list your keys with `--list-keys`, but it won't tell you what any fields are. We can figure it out by\nasking it to specify a distinct format:\n\n```bash\n$ gpg --list-keys --keyid-format=0xshort\n/home/yours/.gnupg/pubring.kbx\n----------------------------\n...\n\npub   rsa3072/0x68A712FE 2021-12-08 [SC] [expires: 2026-12-07]\n      0B7F3E7172FA3012E343091BEA2E9968A712FE\nuid           [ultimate] Yours Truly (github @yours) \u003cyours-truly@temper.systems\u003e\nsub   rsa3072/0x1217ADC0 2021-12-08 [E] [expires: 2026-12-07]\n```\n\nThe keyid in this case is `68A712FE`. If you have two keys with the same email, this is how you select the specific\none you want.\n\nThere's no way to ask `gpg` directly what `--local-user` will select, but this is Unix, and we can use a pipeline:\n\n```bash\n$ echo 'test' | gpg --sign --local-user 'yours-truly@temper.systems' | gpg --verify -\n\ngpg: Signature made Tue 26 Jul 2022 05:23:40 PM EDT\ngpg:                using RSA key 0B7F3E7172FA3012E343091BEA2E9968A712FE\ngpg:                issuer \"yours-truly@temper.systems\"\ngpg: Good signature from \"Yours Truly (github @yours) \u003cyours-truly@temper.systems\u003e\" [ultimate]\n```\n\nThat long hex should match the fingerprint from `gpg --list-keys`. As of this writing, `--list-keys` silently ignores\n`--local-user`.\n\n### Configuring git\n\nEdit either your global config `~/.gitconfig` or the repo config `.git/config` and add these blocks:\n\n```ini\n[user]\n    name = Yours Truly\n    email = yours-truly@temper.systems\n    signingkey = yours-truly@temper.systems\n[commit]\n    gpgsign = true\n```\n\nThe `[commit]` block is there to set `-S` by default for you when you run `git commit`.\n\n### Verifying that it all works\n\nCommit something to a repo and verify it's being signed with:\n\n```bash\n$ git log --show-signature\n\ncommit 761c7878d93f29af5221923e93858c59c398c137 (HEAD -\u003e docs, origin/docs)\ngpg: Signature made Tue 26 Jul 2022 10:46:23 AM EDT\ngpg:                using RSA key 0B7F3E7172FA3012E343091BEA2E8C9968A712FE\ngpg:                issuer \"yours-truly@temper.systems\"\ngpg: Good signature from \"Yours Truly (github @yours) \u003cyours-truly@temper.systems\u003e\" [ultimate]\nAuthor: Yours Truly \u003cyours-truly@temper.systems\u003e\nDate:   Mon Jul 25 17:17:52 2022 -0400\n```\n\n## Verbose tests\n\nFor verbose logging of test actions, add this to the subproject's `build.gradle`:\n\n    tasks.withType(Test) {\n        testLogging {\n            showCauses = true\n            showExceptions = true\n            showStackTraces = true\n            showStandardStreams = true\n            exceptionFormat = \"full\"\n        }\n    }\n\n[Github signature verification]: https://docs.github.com/en/authentication/managing-commit-signature-verification/about-commit-signature-verification\n[Github generating a GPG key]: https://docs.github.com/en/authentication/managing-commit-signature-verification/generating-a-new-gpg-key\n[adding-GPG-key]: https://docs.github.com/en/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account\n[Signing Your Work]: https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work\n[vigilant mode]: https://docs.github.com/en/authentication/managing-commit-signature-verification/displaying-verification-statuses-for-all-of-your-commits\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftemperlang%2Ftemper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftemperlang%2Ftemper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftemperlang%2Ftemper/lists"}