{"id":15022232,"url":"https://github.com/gautamkrishnar/keepalive-workflow","last_synced_at":"2025-05-15T22:01:49.335Z","repository":{"id":38246521,"uuid":"402537487","full_name":"gautamkrishnar/keepalive-workflow","owner":"gautamkrishnar","description":"GitHub action to prevent GitHub from suspending your cronjob based triggers due to repository inactivity ","archived":false,"fork":false,"pushed_at":"2025-03-09T13:13:14.000Z","size":979,"stargazers_count":200,"open_issues_count":1,"forks_count":30,"subscribers_count":4,"default_branch":"version2","last_synced_at":"2025-03-29T05:37:08.220Z","etag":null,"topics":["actions","automation","cronjob","github","github-actions","hacktoberfest","trigger"],"latest_commit_sha":null,"homepage":"https://github.com/marketplace/actions/keepalive-workflow","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gautamkrishnar.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-02T19:20:19.000Z","updated_at":"2025-03-26T15:51:04.000Z","dependencies_parsed_at":"2023-02-15T21:45:53.956Z","dependency_job_id":"5b3a163e-1d06-4472-a51a-6e5c404227db","html_url":"https://github.com/gautamkrishnar/keepalive-workflow","commit_stats":{"total_commits":121,"total_committers":16,"mean_commits":7.5625,"dds":0.4132231404958677,"last_synced_commit":"995aec69bb3f2b45b20f4e107907992c8715086d"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gautamkrishnar%2Fkeepalive-workflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gautamkrishnar%2Fkeepalive-workflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gautamkrishnar%2Fkeepalive-workflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gautamkrishnar%2Fkeepalive-workflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gautamkrishnar","download_url":"https://codeload.github.com/gautamkrishnar/keepalive-workflow/tar.gz/refs/heads/version2","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247749963,"owners_count":20989714,"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","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":["actions","automation","cronjob","github","github-actions","hacktoberfest","trigger"],"created_at":"2024-09-24T19:57:40.533Z","updated_at":"2025-04-08T08:16:04.231Z","avatar_url":"https://github.com/gautamkrishnar.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# Keepalive Workflow [![npm version](https://badge.fury.io/js/keepalive-workflow.svg)](https://badge.fury.io/js/keepalive-workflow)\nGitHub action to prevent GitHub from suspending your cronjob based triggers due to repository inactivity\n\n### Why\nGitHub will suspend the scheduled trigger for GitHub action workflows if there is no commit in the repository for the past 60 days. The cron based triggers won't run unless a new commit is made. It shows the message \"This scheduled workflow is disabled because there hasn't been activity in this repository for at least 60 days\" under the cronjob triggered action.\n\n![preview](https://user-images.githubusercontent.com/8397274/105174930-4303e100-5b49-11eb-90ed-95a55697582f.png)\n\n### What\nThis workflow will automatically use the GitHub API (or create a dummy commit) in your repo if the last commit in your repo is 45 days (default) ago.\nThis will keep the cronjob trigger active so that it will run indefinitely without getting suspended by GitHub for inactivity.\n\n## How to use\nThere are three ways you can consume this library in your GitHub actions\n\n### GitHub API Keepalive Workflow - Default (For GitHub Actions users)\nYou can just include the library as a step after one of your favorite GitHub actions. Your workflow file should have the checkout action defined in one of your steps since this library needs git CLI to work.\n```yaml\nname: Github Action with a cronjob trigger\non:\n  schedule:\n    - cron: \"0 0 * * *\"\npermissions:\n  actions: write\njobs:\n  cronjob-based-github-action:\n    name: Cronjob based github action\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # - step 2\n      # - step n, use it as the last step\n      - uses: gautamkrishnar/keepalive-workflow@v2 # using the workflow with default settings\n```\n\nMoving the keepalive workflow into its own distinct job is strongly recommended for better security. For example:\n```yaml\nname: Github Action with a cronjob trigger\non:\n  schedule:\n    - cron: \"0 0 * * *\"\njobs:\n  main-job:\n    name: Main Job\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # - step1\n      # - step 2\n      # - Step N\n  keepalive-job:\n    name: Keepalive Workflow\n    runs-on: ubuntu-latest\n    permissions:\n      actions: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: gautamkrishnar/keepalive-workflow@v2\n```\n##### Advanced use cases\n\u003cdetails\u003e\n  \u003csummary\u003eKeeping another workflow file active using keepalive workflow\u003c/summary\u003e\n\nLets assume that you have some build workflows:\n\n- `.github/workflows/build1.yml`\n```yaml\nname: Build 20\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  publish-npm:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-node@v3\n        with:\n          node-version: \"20\"\n          cache: \"yarn\"\n      - run: yarn install --frozen-lockfile\n      - run: yarn build\n```\n- `.github/workflows/build2.yml`\n```yaml\nname: Build 19\n\non:\n  schedule:\n    - cron: \"0 0 * * *\"\n\njobs:\n  publish-npm:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-node@v3\n        with:\n          node-version: \"19\"\n          cache: \"yarn\"\n      - run: yarn install --frozen-lockfile\n      - run: yarn build\n```\n\nYou can keep both of these workflows active using the following keepalive workflow code:\n```yaml\nname: Keepalive Workflow\non:\n  schedule:\n    - cron: \"0 0 * * *\"\npermissions:\n  actions: write\njobs:\n  cronjob-based-github-action:\n    name: Keepalive Workflow\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: gautamkrishnar/keepalive-workflow@v2\n        with:\n          workflow_files: \"build1.yml, build2.yml\"\n          time_elapsed: \"0\"\n```\n\u003c/details\u003e\n\n### Dummy Commit Keepalive Workflow (For GitHub Actions users)\nTo use the workflow in auto commit mode you can use the following code, Please note that this will create empty commits in your repository every 45 days to keep it active.\nUse the default API based option instead for a clean Git commit history.\n```yaml\nname: Github Action with a cronjob trigger\non:\n  schedule:\n    - cron: \"0 0 * * *\"\npermissions:\n  contents: write\njobs:\n  cronjob-based-github-action:\n    name: Cronjob based github action\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # - step1\n      # - step 2\n      # - step n, use it as the last step\n      - uses: gautamkrishnar/keepalive-workflow@v2\n        with:\n          use_api: false\n\n```\n\nMoving the keepalive workflow into its own distinct job is strongly recommended here as well, for better security:\n```yaml\nname: Github Action with a cronjob trigger\non:\n  schedule:\n    - cron: \"0 0 * * *\"\njobs:\n  main-job:\n    name: Main Job\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      # - step1\n      # - step 2\n      # - Step N\n  keepalive-job:\n    name: Keepalive Workflow\n    if: ${{ always() }}\n    needs: main-job\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@v4\n      - uses: gautamkrishnar/keepalive-workflow@v2\n        with:\n          use_api: false\n```\n\n\u003cdetails\u003e\n  \u003csummary\u003eLet's take an example of [Waka Readme](https://github.com/athul/waka-readme)\u003c/summary\u003e\n\n```yaml\nname: My awesome readme\non:\n  workflow_dispatch:\n  schedule:\n    # Runs at 12 am UTC\n    - cron: \"0 0 * * *\"\n\njobs:\n  update-readme:\n    name: Update this repo's README\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: athul/waka-readme@master\n        with:\n          WAKATIME_API_KEY: ${{ secrets.WAKATIME_API_KEY }}\n      - uses: gautamkrishnar/keepalive-workflow@v2 # using the workflow\n```\n\u003c/details\u003e\n\n### Using via NPM (For GitHub Actions developers)\nFor developers creating GitHub actions, you can consume the library in your javascript-based GitHub action by installing it from [NPM](https://www.npmjs.com/package/keepalive-workflow). Make sure that your GitHub action uses checkout action since this library needs it as a dependency.\nYou can also ask your users to include it as an additional step as mentioned in the first part.\n\n#### Install the package\nInstall via NPM:\n```bash\nnpm i keepalive-workflow\n```\n\nInstall via Yarn:\n```bash\nyarn add keepalive-workflow\n```\n\n#### Use it in your own GitHub action source code\n```javascript\nconst core = require('@actions/core');\nconst { KeepAliveWorkflow, APIKeepAliveWorkflow } = require('keepalive-workflow');\n\n// Using the lib in Dummy commits mode\nKeepAliveWorkflow(githubToken, committerUsername, committerEmail, commitMessage, timeElapsed)\n  .then((message) =\u003e {\n    core.info(message);\n    process.exit(0);\n  })\n  .catch((error) =\u003e {\n    core.error(error);\n    process.exit(1);\n  });\n\n// Using the lib in GitHub API mode\nAPIKeepAliveWorkflow(githubToken, {\n  timeElapsed\n}).then((message) =\u003e {\n    core.info(message);\n    process.exit(0);\n  })\n  .catch((error) =\u003e {\n    core.error(error);\n    process.exit(1);\n  });\n```\n\n## Options\n### For GitHub Action\nIf you use the workflow as mentioned via GitHub actions following are the options available to you to customize its behavior.\n\n| Option               | Default Value                                                          | Description                                                                                                                                                                                                           | Required |\n|----------------------|------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|\n| `gh_token`           | your default GitHub token with repo scope                              | GitHub access token with Repo scope                                                                                                                                                                                   | No       |\n| `commit_message`     | `Automated commit by Keepalive Workflow to keep the repository active` | Commit message used while committing to the repo                                                                                                                                                                      | No       |\n| `committer_username` | `gkr-bot`                                                              | Username used while committing to the repo                                                                                                                                                                            | No       |\n| `committer_email`    | `gkr@tuta.io`                                                          | Email id used while committing to the repo                                                                                                                                                                            | No       |\n| `time_elapsed`       | `45`                                                                   | Time elapsed from the previous commit to trigger a new automated commit or API call (in days). Set 0 to skip commit date checking, this will also removes the dependency with `actions/checkout` workflow in your job | No       |\n| `auto_push`          | `true`                                                                 | Defines if the workflow pushes the changes automatically                                                                                                                                                              | No       |\n| `auto_write_check`   | `false`                                                                | Specifies whether the workflow will verify the repository's write access privilege for the token before executing                                                                                                     | No       |\n| `use_api`            | `true`                                                                 | Instead of using dummy commits, workflow uses GitHub API to keep the repository active                                                                                                                                | No       |\n| `workflow_files`     | `\"\"`                                                                   | Comma separated list of workflow files. You can use this to keepalive another workflow that's not a part of keepalive workflow's file. See [example](#advanced-use-cases) for more info.                              | No       |\n\n\n### For Javascript Library\nIf you are using the JS Library version of the project, please consult the function's DocStrings in [library.js](library.js) to see the list of available parameters.\n\n### Migrating from v1 to v2\nIf you are an existing user which used this workflow's v1 version, you can easily migrate to v2 by simply updating the permissions key in your workflow:\n\nChange:\n```yaml\npermissions:\n  contents: write\n```\nto\n```yaml\npermissions:\n  actions: write\n```\nAnd change the workflow's version from `gautamkrishnar/keepalive-workflow@v1` or `gautamkrishnar/keepalive-workflow@master` to `gautamkrishnar/keepalive-workflow@v2`. This will automatically start using the workflow's API based method. No more dummy commits 🕺 .\n\n### Workflow Versions\n- v1 version of project used dummy commit by default to keep the repository active, It will no longer be maintained except for security patches and bug fixes. You can view the source coe of v1 version at the [master](https://github.com/gautamkrishnar/keepalive-workflow/tree/master) branch of this repository. This branch is kept intact for people who are using `gautamkrishnar/keepalive-workflow@master`.\n- v2 version will be developed and maintained by keeping the [version2](https://github.com/gautamkrishnar/keepalive-workflow/tree/version2) branch as the source. Going forward, This will be the main branch.\n\n### FAQs and Common issues\n- [Error Code 128 / `GH006: Protected branch update failed`](https://github.com/gautamkrishnar/keepalive-workflow/discussions/13)\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/abitmore\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/9946777?v=4?s=100\" width=\"100px;\" alt=\"Abit\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAbit\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=abitmore\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Nigui\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6088236?v=4?s=100\" width=\"100px;\" alt=\"Guillaume NICOLAS\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGuillaume NICOLAS\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=Nigui\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/dmaticzka\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/113329?v=4?s=100\" width=\"100px;\" alt=\"Daniel Maticzka\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Maticzka\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=dmaticzka\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://itrooz.fr\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/42669835?v=4?s=100\" width=\"100px;\" alt=\"iTrooz\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eiTrooz\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=iTrooz\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://lgmorand.github.io\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/6757079?v=4?s=100\" width=\"100px;\" alt=\"Louis-Guillaume MORAND\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLouis-Guillaume MORAND\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=lgmorand\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/kaovilai\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/11228024?v=4?s=100\" width=\"100px;\" alt=\"Tiger Kaovilai\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTiger Kaovilai\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=kaovilai\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Howard20181\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40033067?v=4?s=100\" width=\"100px;\" alt=\"Howard Wu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHoward Wu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=Howard20181\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://lisk.in/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/300342?v=4?s=100\" width=\"100px;\" alt=\"Tomáš Janoušek\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTomáš Janoušek\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#ideas-liskin\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.linkedin.com/in/methodho\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2764992?v=4?s=100\" width=\"100px;\" alt=\"Shihyu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eShihyu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=shihyuho\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://alexomara.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1740229?v=4?s=100\" width=\"100px;\" alt=\"Alexander O'Mara\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAlexander O'Mara\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=AlexanderOMara\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://randyfay.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/112444?v=4?s=100\" width=\"100px;\" alt=\"Randy Fay\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eRandy Fay\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/issues?q=author%3Arfay\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/julienloizelet\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/20956510?v=4?s=100\" width=\"100px;\" alt=\"Julien Loizelet\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJulien Loizelet\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/issues?q=author%3Ajulienloizelet\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://han-joon-hyeok.github.io/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54902347?v=4?s=100\" width=\"100px;\" alt=\"JoonHyeok Han\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJoonHyeok Han\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=Han-Joon-Hyeok\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://hansmi.ch/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3238454?v=4?s=100\" width=\"100px;\" alt=\"hansmi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ehansmi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=hansmi\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/gautamkrishnar/keepalive-workflow/commits?author=hansmi\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n## License\nThis project uses [GNU GENERAL PUBLIC LICENSE](LICENSE)\n\n## Liked it?\n\nHope you liked this project, don't forget to give it a star ⭐.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgautamkrishnar%2Fkeepalive-workflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgautamkrishnar%2Fkeepalive-workflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgautamkrishnar%2Fkeepalive-workflow/lists"}