{"id":35815577,"url":"https://github.com/shapehq/actions","last_synced_at":"2026-02-03T13:13:20.068Z","repository":{"id":332075719,"uuid":"554661959","full_name":"shapehq/actions","owner":"shapehq","description":"🤖 GitHub Actions used across projects in Framna Denmark.","archived":false,"fork":false,"pushed_at":"2026-01-29T15:02:53.000Z","size":2541,"stargazers_count":11,"open_issues_count":2,"forks_count":1,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-01-30T03:55:06.139Z","etag":null,"topics":["github-actions"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/shapehq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-10-20T07:14:19.000Z","updated_at":"2026-01-29T14:48:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/shapehq/actions","commit_stats":null,"previous_names":["shapehq/actions"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/shapehq/actions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shapehq%2Factions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shapehq%2Factions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shapehq%2Factions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shapehq%2Factions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shapehq","download_url":"https://codeload.github.com/shapehq/actions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shapehq%2Factions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29046503,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["github-actions"],"created_at":"2026-01-07T16:08:11.961Z","updated_at":"2026-02-03T13:13:20.056Z","avatar_url":"https://github.com/shapehq.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\u003ch3\u003eActions used with \u003ca href=\"https://github.com/features/actions\"\u003eGitHub Actions\u003c/a\u003e internally at \u003ca href=\"https://framna.com\"\u003eFramna Denmark\u003c/a\u003e.\u003c/h4\u003e\n\u003c/div\u003e\n\n\u003chr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"#-getting-started\"\u003e🚀 Getting Started\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003ca href=\"#-actions\"\u003e🧩 Actions\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003ca href=\"#%EF%B8%8F-versioning-model\"\u003e🏷️ Versioning Model\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n\u003ca href=\"#%E2%80%8D-contributing\"\u003e👩‍💻 Contributing\u003c/a\u003e\n\u003c/div\u003e\n\n\u003chr /\u003e\n\n\u003e [!WARNING]\n\u003e This repository is made public for transparency and reference purposes. These actions are primarily designed for internal use at Framna Denmark and are tailored to our specific workflows and infrastructure.\n\u003e\n\u003e **We provide no guarantees regarding:**\n\u003e\n\u003e - Backward compatibility between versions\n\u003e - Stability or suitability for external use cases\n\u003e - Response to external issues or pull requests\n\u003e - Documentation completeness for external users\n\u003e\n\u003e Use these actions at your own risk. Breaking changes may occur without prior notice.\n\n\u003chr /\u003e\n\n## 🚀 Getting Started\n\nSeveral of these actions depend on the 1Password CLI being installed. Please use 1Password's [install-cli-action](https://github.com/1Password/install-cli-action) action to install the 1Password CLI or [load-secrets-action](https://github.com/1Password/load-secrets-action) to load secrets into the workflow's environment.\n\nInputs prefixed with `op-` expect a 1Password item reference, for example `op://My Vault/My Item/field`. The action will use `op read` to fetch the value or file from 1Password at runtime.\n\nClick on any action name below to view detailed documentation, usage examples, and configuration options for that specific action.\n\n## 🧩 Actions\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth align=\"left\"\u003eAction\u003c/th\u003e\n      \u003cth align=\"left\"\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./build-and-upload-to-app-store-connect/\"\u003ebuild-and-upload-to-app-store-connect\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eBuilds an Xcode project, archives the app, exports an IPA from the archive, and uploads it to App Store Connect.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./connect-to-vpn/\"\u003econnect-to-vpn\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eConnects the runner to our a predefined Tailscale exit node.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./create-and-launch-avd/\"\u003ecreate-and-launch-avd\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eCreates and launches an Android Virtual Device.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./create-or-update-pr-comment/\"\u003ecreate-or-update-pr-comment\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eCreates (or updates if already exists) a PR comment. Always updates the same comment by default using a hidden marker.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-appiconannotator/\"\u003einstall-appiconannotator\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls \u003ca href=\"https://github.com/shapehq/appiconannotator\"\u003eappiconannotator\u003c/a\u003e.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-artifactory-profile/\"\u003einstall-artifactory-profile\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls credentials with read access to our JFrog Artifactory.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-asc-api-key/\"\u003einstall-asc-api-key\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls an App Store Connect API key file on the runner and outputs the issuer ID, key ID, and file path of the AuthKey file.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-certificate/\"\u003einstall-certificate\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls the specified certificate in the keychain.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-ci-ssh-key/\"\u003einstall-ci-ssh-key\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstall the CI's SSH key.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-company-asc-api-key/\"\u003einstall-company-asc-api-key\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls our company App Store Connect API key file on the runner and outputs the issuer ID, key ID, and file path of the AuthKey file.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-company-development-certificate/\"\u003einstall-company-development-certificate\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls our default company development certificate in the keychain.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-company-distribution-certificate/\"\u003einstall-company-distribution-certificate\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls our default company distribution certificate in the keychain.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-provisioning-profile/\"\u003einstall-provisioning-profile\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls a provisioning profile.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-ssh-key/\"\u003einstall-ssh-key\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls an SSH key or a \u003ca href=\"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/managing-deploy-keys\"\u003edeploy key\u003c/a\u003e, which is an SSH key that grants access to a single repository.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./jira-comment/\"\u003ejira-comment\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eAdds comment to a Jira issue.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./jira-issues-changelog/\"\u003ejira-issues-changelog\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eOutputs a list of Jira issue keys mentioned in commit messages between the current commit and the most recent tag.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./loco-translation-status-checker/\"\u003eloco-translation-status-checker\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eChecks if there are missing translations in the Localize.biz project throws error.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./loco-translation-status-poster/\"\u003eloco-translation-status-poster\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eChecks if there are missing translations in the Localize.biz project and posts warning to Slack.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./oasdiff/\"\u003eoasdiff\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eRuns \u003ca href=\"https://github.com/tufin/oasdiff\"\u003eoasdiff\u003c/a\u003e changelog between two OpenAPI specs and outputs the differences.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./post-slack-message/\"\u003epost-slack-message\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003ePosts a message to Slack.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./render-ios-app-icon-badge/\"\u003erender-ios-app-icon-badge\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eAdds a badge to an iOS app icon to indicate that the app is meant for testing purposes.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./swiftlint/\"\u003eswiftlint\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eRuns \u003ca href=\"https://github.com/realm/SwiftLint\"\u003eSwiftLint\u003c/a\u003e on a codebase.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./upload-artifact-firebase/\"\u003eupload-artifact-firebase\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eUploads an APK to Firebase App Distribution.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./upload-artifact-play-store/\"\u003eupload-artifact-play-store\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eUploads a release build (.apk or .aab) to the internal track of the Play Store.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./xcode-select/\"\u003excode-select\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eSelects a version of Xcode. The major, minor, and patch values must all be specified, otherwise the action will throw an error.\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n### Legacy Actions\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth align=\"left\"\u003eAction\u003c/th\u003e\n      \u003cth align=\"left\"\u003eDescription\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./install-shipshape/\"\u003einstall-shipshape\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eInstalls Shipshape and sets an activation code.\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd nowrap\u003e\u003ca href=\"./upload-apk-shipshape/\"\u003eupload-apk-shipshape\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003eUploads an APK to Shipshape.\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## 🏷️ Versioning Model\n\nThis repository is versioned as a whole, meaning all actions share the same version.\n\nWe follow [Semantic Versioning](https://semver.org/). Version bumps are based on changes merged into `main`:\n\n- **Major**: Breaking changes to one or more actions (e.g. removed/renamed inputs, changed outputs, changed behavior in an incompatible way).\n- **Minor**: Backwards-compatible changes (e.g. new action, new functionality, new inputs, enhancements).\n- **Patch**: Bug fixes and other backwards-compatible maintenance changes.\n\n## 👩‍💻 Contributing\n\nPull requests with bugfixes and new features are appreciated. We are happy to review PRs and merge them once they are ready, as long as the changes fit the vision of Framna Denmark and align with our internal tech stack and needs.\n\nClone the repository to get started:\n\n```\ngit clone git@github.com:shapehq/actions.git\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshapehq%2Factions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshapehq%2Factions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshapehq%2Factions/lists"}