{"id":19435519,"url":"https://github.com/cssnr/portainer-stack-deploy-action","last_synced_at":"2025-04-14T18:32:55.948Z","repository":{"id":248604439,"uuid":"829144625","full_name":"cssnr/portainer-stack-deploy-action","owner":"cssnr","description":"Portainer Stack Deploy Action","archived":false,"fork":false,"pushed_at":"2025-03-21T05:33:40.000Z","size":526,"stargazers_count":7,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-28T07:02:11.365Z","etag":null,"topics":["actions"],"latest_commit_sha":null,"homepage":"https://cssnr.github.io","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/cssnr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-15T21:13:45.000Z","updated_at":"2025-03-21T05:33:42.000Z","dependencies_parsed_at":"2024-09-07T07:48:56.445Z","dependency_job_id":"01e6142f-2992-4c03-85d9-c026180660ac","html_url":"https://github.com/cssnr/portainer-stack-deploy-action","commit_stats":null,"previous_names":["cssnr/portainer-stack-deploy-action"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cssnr%2Fportainer-stack-deploy-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cssnr%2Fportainer-stack-deploy-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cssnr%2Fportainer-stack-deploy-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cssnr%2Fportainer-stack-deploy-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cssnr","download_url":"https://codeload.github.com/cssnr/portainer-stack-deploy-action/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248936936,"owners_count":21186130,"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"],"created_at":"2024-11-10T15:06:48.095Z","updated_at":"2025-04-14T18:32:55.937Z","avatar_url":"https://github.com/cssnr.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![GitHub Tag Major](https://img.shields.io/github/v/tag/cssnr/portainer-stack-deploy-action?sort=semver\u0026filter=!v*.*\u0026logo=git\u0026logoColor=white\u0026labelColor=585858\u0026label=%20)](https://github.com/cssnr/portainer-stack-deploy-action/tags)\n[![GitHub Tag Minor](https://img.shields.io/github/v/tag/cssnr/portainer-stack-deploy-action?sort=semver\u0026filter=!v*.*.*\u0026logo=git\u0026logoColor=white\u0026labelColor=585858\u0026label=%20)](https://github.com/cssnr/portainer-stack-deploy-action/tags)\n[![GitHub Release Version](https://img.shields.io/github/v/release/cssnr/portainer-stack-deploy-action?logo=git\u0026logoColor=white\u0026labelColor=585858\u0026label=%20)](https://github.com/cssnr/portainer-stack-deploy-action/releases/latest)\n[![GitHub Dist Size](https://img.shields.io/github/size/cssnr/portainer-stack-deploy-action/dist%2Findex.js?label=dist%20size)](https://github.com/cssnr/portainer-stack-deploy-action/blob/master/src/index.js)\n[![Workflow Release](https://img.shields.io/github/actions/workflow/status/cssnr/portainer-stack-deploy-action/release.yaml?logo=github\u0026label=release)](https://github.com/cssnr/portainer-stack-deploy-action/actions/workflows/release.yaml)\n[![Workflow Test](https://img.shields.io/github/actions/workflow/status/cssnr/portainer-stack-deploy-action/test.yaml?logo=github\u0026label=test)](https://github.com/cssnr/portainer-stack-deploy-action/actions/workflows/test.yaml)\n[![Workflow Lint](https://img.shields.io/github/actions/workflow/status/cssnr/portainer-stack-deploy-action/lint.yaml?logo=github\u0026label=lint)](https://github.com/cssnr/portainer-stack-deploy-action/actions/workflows/lint.yaml)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=cssnr_portainer-stack-deploy-action\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=cssnr_portainer-stack-deploy-action)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/cssnr/portainer-stack-deploy-action?logo=github\u0026label=updated)](https://github.com/cssnr/portainer-stack-deploy-action/graphs/commit-activity)\n[![Codeberg Last Commit](https://img.shields.io/gitea/last-commit/cssnr/portainer-stack-deploy-action/master?gitea_url=https%3A%2F%2Fcodeberg.org%2F\u0026logo=codeberg\u0026logoColor=white\u0026label=updated)](https://codeberg.org/cssnr/portainer-stack-deploy-action)\n[![GitHub Top Language](https://img.shields.io/github/languages/top/cssnr/portainer-stack-deploy-action?logo=htmx)](https://github.com/cssnr/portainer-stack-deploy-action)\n[![GitHub Forks](https://img.shields.io/github/forks/cssnr/portainer-stack-deploy-action?style=flat\u0026logo=github)](https://github.com/cssnr/portainer-stack-deploy-action/forks)\n[![GitHub Repo Stars](https://img.shields.io/github/stars/cssnr/portainer-stack-deploy-action?style=flat\u0026logo=github)](https://github.com/cssnr/portainer-stack-deploy-action/stargazers)\n[![GitHub Org Stars](https://img.shields.io/github/stars/cssnr?style=flat\u0026logo=github\u0026label=org%20stars)](https://cssnr.github.io/)\n[![Discord](https://img.shields.io/discord/899171661457293343?logo=discord\u0026logoColor=white\u0026label=discord\u0026color=7289da)](https://discord.gg/wXy6m2X8wY)\n\n# Portainer Stack Deploy Action\n\n- [Inputs](#Inputs)\n- [Outputs](#Outputs)\n- [Examples](#Examples)\n- [Tags](#Tags)\n- [Troubleshooting](#Troubleshooting)\n- [Support](#Support)\n- [Contributing](#Contributing)\n\nDeploy or Update a Portainer Stack from a Repository or Compose File. Supports most features including specifying the\nrepository, compose file, environment variables and much more...\n\nThis action is written from the ground up in VanillaJS and is not a fork/clone of existing actions.\n\n_No Portainer?_ You can deploy directly to a docker over ssh with: [cssnr/stack-deploy-action](https://github.com/cssnr/stack-deploy-action)\n\n\u003e [!NOTE]  \n\u003e Please submit a [Feature Request](https://github.com/cssnr/portainer-stack-deploy-action/discussions/categories/feature-requests)\n\u003e for new features or [Open an Issue](https://github.com/cssnr/portainer-stack-deploy-action/issues) if you find any bugs.\n\nThis is a fairly simple action, for more details see [src/index.js](src/index.js) and [src/portainer.js](src/portainer.js).\n\n## Inputs\n\n| Input        |  Req.   | Default\u0026nbsp;Value    | Input\u0026nbsp;Description   |\n| :----------- | :-----: | :-------------------- | :----------------------- |\n| `token`      | **Yes** | -                     | Portainer Token \\*       |\n| `url`        | **Yes** | -                     | Portainer URL            |\n| `name`       | **Yes** | -                     | Stack Name               |\n| `file`       |    -    | `docker-compose.yaml` | Compose File             |\n| `endpoint`   |    -    | `endpoints[0].Id`     | Portainer Endpoint \\*    |\n| `ref`        |    -    | `current reference`   | Repository Ref \\*        |\n| `repo`       |    -    | `current repository`  | Repository URL \\*        |\n| `tlsskip`    |    -    | `false`               | Skip Repo TLS Verify     |\n| `prune`      |    -    | `true`                | Prune Services           |\n| `pull`       |    -    | `true`                | Pull Images              |\n| `type`       |    -    | `repo`                | Type [`repo`, `file`] \\* |\n| `standalone` |    -    | `false`               | Deploy Standalone Stack  |\n| `env_json`   |    -    | -                     | Dotenv JSON Data \\*\\*    |\n| `env_file`   |    -    | -                     | Dotenv File Path \\*      |\n| `merge_env`  |    -    | `false`               | Merge Env Vars \\*        |\n| `username`   |    -    | -                     | Repository Username \\*   |\n| `password`   |    -    | -                     | Repository Password \\*   |\n| `fs_path`    |    -    | -                     | Relative Path (BE) \\*    |\n| `summary`    |    -    | `true`                | Add Summary to Job \\*    |\n\n\u003e For more details on inputs, see the Portainer API [documentation](https://app.swaggerhub.com/apis/portainer/portainer-ce/).\n\n**token:** To create a Portainer API token see: https://docs.portainer.io/api/access\n\n**endpoint:** If `endpoint` is not provided the first endpoint returned by the API will be used.\nIf you only have one endpoint, this will work as expected, otherwise, you should provide an endpoint.\n\n**ref:** If you want to deploy a different ref than the one triggering the workflow.\nUseful if you are deploying from another repository. Example: `refs/heads/master`\n\n**repo:** This defaults to the repository running the action. If you want to deploy a different repository\nput the full http URL to that repository here.\n\n**type:** Type of Deployment. Currently, supports either `repo` or `file`.\n\n**env_json/env_file:** Optional environment variables used when creating the stack. File should be in dotenv format and\nJSON should be an object. Example: `{\"KEY\": \"Value\"}`\n\n\u003e [!WARNING]  \n\u003e Inputs are NOT secure unless using secrets or secure output.\n\u003e Using `env_json` on a public repository will otherwise expose this data.\n\u003e To securely pass an environment use the `env_file` option.\n\n**merge_env:** If this is `true` and the stack exists, will update the existing Env with the provided `env_json/env_file`.\nIf you are not providing an env, the existing env will be used, and you do not need to set this.\n\n**username/password:** Only set these if the `repo` is private and requires authentication.\nThis is NOT the Portainer username/password, see `token` for Portainer authentication.\n\n**fs_path:** Relative Path Support for Portainer BE.\nSet this to enable relative path volumes support for volume mappings in your compose file.\nSee the [docs](https://docs.portainer.io/advanced/relative-paths) for more info.\n\n**summary:** Write a Summary for the job. To disable this set to `false`.\n\nTo view a workflow run, click on a recent [Test](https://github.com/cssnr/portainer-stack-deploy-action/actions/workflows/test.yaml) job _(requires login)_.\n\n\u003cdetails\u003e\u003csummary\u003e👀 View Example Job Summary\u003c/summary\u003e\n\n---\n\n🎉 **Created** New Stack 112: `test_portainer-stack-deploy`\n\n\u003cdetails\u003e\u003csummary\u003eStack Details\u003c/summary\u003e\u003ctable\u003e\u003ctr\u003e\u003cth\u003eItem\u003c/th\u003e\u003cth\u003eValue\u003c/th\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eID\u003c/td\u003e\u003ctd\u003e112\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eName\u003c/td\u003e\u003ctd\u003etest_portainer-stack-deploy\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eFile\u003c/td\u003e\u003ctd\u003edocker-compose.yml\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eType\u003c/td\u003e\u003ctd\u003eSwarm\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eStatus\u003c/td\u003e\u003ctd\u003eActive\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eCreated\u003c/td\u003e\u003ctd\u003e2/28/2025, 3:09:16 AM\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eUpdated\u003c/td\u003e\u003ctd\u003e-\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003ePath\u003c/td\u003e\u003ctd\u003e/data/compose/112\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eEndpointID\u003c/td\u003e\u003ctd\u003e1\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eSwarmID\u003c/td\u003e\u003ctd\u003ewr8i8agdr05n6wsf1tkcnhwik\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003c/details\u003e\n\n---\n\n\u003c/details\u003e\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n```\n\n## Outputs\n\n| Output     | Output\u0026nbsp;Description |\n| :--------- | :---------------------- |\n| stackID    | Resulting Stack ID      |\n| swarmID    | Resulting Swarm ID      |\n| endpointID | Endpoint ID             |\n\n```yaml\n- name: 'Portainer Deploy'\n  id: stack\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n\n- name: 'Echo Output'\n  run: |\n    echo \"stackID: '${{ steps.stack.outputs.stackID }}'\"\n    echo \"swarmID: '${{ steps.stack.outputs.swarmID }}'\"\n    echo \"endpointID: '${{ steps.stack.outputs.endpointID }}'\"\n```\n\n## Examples\n\n💡 _Click on an example heading to expand or collapse the example._\n\n\u003cdetails open\u003e\u003csummary\u003eDeploy from a compose file\u003c/summary\u003e\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    type: file\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eDeploy from the repository\u003c/summary\u003e\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eDeploy from a different repository\u003c/summary\u003e\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    repo: https://github.com/user/some-other-repo\n    ref: refs/heads/master\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eSpecify environment variables\u003c/summary\u003e\n\nYou can use env_json, env_file, or both.\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    type: file\n    env_json: '{\"KEY\": \"Value\"}'\n    env_file: .env\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eMerging existing environment variables\u003c/summary\u003e\n\nThis will add the provided variables to the existing stack variables.\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    type: file\n    env_json: '{\"KEY\": \"Value\"}'\n    merge_env: true\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eMultiline JSON data input\u003c/summary\u003e\n\nNote: Secrets are secure in this context.\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    type: file\n    env_json: |\n      {\n        \"APP_PRIVATE_KEY\": \"${{ secrets.APP_PRIVATE_KEY }}\",\n        \"VERSION\": \"${{ inputs.VERSION }}\"\n      }\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eOnly run on release events\u003c/summary\u003e\n\nThis is accomplished by adding an `if` to the step.\n\n- `if: ${{ github.event_name == 'release' }}`\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  if: ${{ github.event_name == 'release' }}\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eDeploy with relative path volumes\u003c/summary\u003e\n\nPortainer Business Edition Only.\n\n```yaml\n- name: 'Portainer Deploy'\n  uses: cssnr/portainer-stack-deploy-action@v1\n  with:\n    token: ${{ secrets.PORTAINER_TOKEN }}\n    url: https://portainer.example.com:9443\n    name: stack-name\n    file: docker-compose.yaml\n    fs_path: /mnt\n```\n\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eFull build and deploy workflow\u003c/summary\u003e\n\nThis example builds an image, pushes to a registry, then deploys to Portainer.\n\n```yaml\nname: 'Portainer Stack Deploy Action'\n\non:\n  workflow_dispatch:\n    inputs:\n      tags:\n        description: 'Tags: comma,separated'\n        required: true\n        default: 'latest'\n\nenv:\n  REGISTRY: 'ghcr.io'\n\nconcurrency:\n  group: ${{ github.workflow }}\n  cancel-in-progress: true\n\njobs:\n  build:\n  name: 'Build'\n  runs-on: ubuntu-latest\n  timeout-minutes: 15\n  permissions:\n    packages: write\n\n  steps:\n    - name: 'Checkout'\n      uses: actions/checkout@v4\n\n    - name: 'Setup Buildx'\n      uses: docker/setup-buildx-action@v2\n      with:\n        platforms: 'linux/amd64,linux/arm64'\n\n    - name: 'Docker Login'\n      uses: docker/login-action@v3\n      with:\n        registry: $${{ env.REGISTRY }}\n        username: ${{ secrets.GHCR_USER }}\n        password: ${{ secrets.GHCR_PASS }}\n\n    - name: 'Generate Tags'\n      id: tags\n      uses: cssnr/docker-tags-action@v1\n      with:\n        images: $${{ env.REGISTRY }}/${{ github.repository }}\n        tags: ${{ inputs.tags }}\n\n    - name: 'Build and Push'\n      uses: docker/build-push-action@v6\n      with:\n        context: .\n        platforms: 'linux/amd64,linux/arm64'\n        push: true\n        tags: ${{ steps.tags.outputs.tags }}\n        labels: ${{ steps.tags.outputs.labels }}\n\n  deploy:\n    name: 'Deploy'\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    needs: [build]\n\n    steps:\n      - name: 'Checkout'\n        uses: actions/checkout@v4\n\n      - name: 'Portainer Deploy'\n        uses: cssnr/portainer-stack-deploy-action@v1\n        with:\n          token: ${{ secrets.PORTAINER_TOKEN }}\n          url: https://portainer.example.com\n          name: stack-name\n          file: docker-compose-swarm.yaml\n\n  cleanup:\n    name: 'Cleanup'\n    runs-on: ubuntu-latest\n    timeout-minutes: 5\n    needs: [deploy]\n    permissions:\n      contents: read\n      packages: write\n\n    steps:\n      - name: 'Purge Cache'\n        uses: cssnr/cloudflare-purge-cache-action@v2\n        with:\n          token: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n          zones: cssnr.com\n```\n\n\u003c/details\u003e\n\nFor more examples, you can check out other projects using this action:  \nhttps://github.com/cssnr/portainer-stack-deploy-action/network/dependents\n\n## Tags\n\nThe following rolling [tags](https://github.com/cssnr/portainer-stack-deploy-action/tags) are maintained.\n\n| Version\u0026nbsp;Tag                                                                                                                                                                                                                           | Rolling | Bugs | Feat. |   Name    |  Target  | Example  |\n| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-----: | :--: | :---: | :-------: | :------: | :------- |\n| [![GitHub Tag Major](https://img.shields.io/github/v/tag/cssnr/portainer-stack-deploy-action?sort=semver\u0026filter=!v*.*\u0026style=for-the-badge\u0026label=%20\u0026color=44cc10)](https://github.com/cssnr/portainer-stack-deploy-action/releases/latest) |   ✅    |  ✅  |  ✅   | **Major** | `vN.x.x` | `vN`     |\n| [![GitHub Tag Minor](https://img.shields.io/github/v/tag/cssnr/portainer-stack-deploy-action?sort=semver\u0026filter=!v*.*.*\u0026style=for-the-badge\u0026label=%20\u0026color=blue)](https://github.com/cssnr/portainer-stack-deploy-action/releases/latest) |   ✅    |  ✅  |  ❌   | **Minor** | `vN.N.x` | `vN.N`   |\n| [![GitHub Release](https://img.shields.io/github/v/release/cssnr/portainer-stack-deploy-action?style=for-the-badge\u0026label=%20\u0026color=red)](https://github.com/cssnr/portainer-stack-deploy-action/releases/latest)                           |   ❌    |  ❌  |  ❌   | **Micro** | `vN.N.N` | `vN.N.N` |\n\nYou can view the release notes for each version on the [releases](https://github.com/cssnr/portainer-stack-deploy-action/releases) page.\n\nThe **Major** tag is recommended. It is the most up-to-date and always backwards compatible.\nBreaking changes would result in a **Major** version bump. At a minimum you should use a **Minor** tag.\n\n## Troubleshooting\n\n- No such image: ghcr.io/user/repo-name:tag\n\nMake sure your package is not private. If you intend to use a private package, then:  \nGo to Portainer Registries: https://portainer.example.com/#!/registries/new  \nChoose Custom registry, set `ghcr.io` for Registry URL, enable authentication, and add your username/token.\n\n- Error: Resource not accessible by integration\n\nOnly applies to `build-push-action` or `bake-action` type actions, not this action.  \nPermissions can be added on the job or step level with:\n\n```yaml\npermissions:\n  packages: write\n```\n\nPermissions documentation for\n[Workflows](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token)\nand [Actions](https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication).\n\n# Support\n\nFor general help or to request a feature, see:\n\n- Q\u0026A Discussion: https://github.com/cssnr/portainer-stack-deploy-action/discussions/categories/q-a\n- Request a Feature: https://github.com/cssnr/portainer-stack-deploy-action/discussions/categories/feature-requests\n\nIf you are experiencing an issue/bug or getting unexpected results, you can:\n\n- Report an Issue: https://github.com/cssnr/portainer-stack-deploy-action/issues\n- Chat with us on Discord: https://discord.gg/wXy6m2X8wY\n- Provide General Feedback: [https://cssnr.github.io/feedback/](https://cssnr.github.io/feedback/?app=Portainer%20Stack%20Deploy)\n\nFor more information, see the CSSNR [SUPPORT.md](https://github.com/cssnr/.github/blob/master/.github/SUPPORT.md#support).\n\n# Contributing\n\nCurrently, the best way to contribute to this project is to star this project on GitHub.\n\nIf you would like to submit a PR, please review the [CONTRIBUTING.md](CONTRIBUTING.md).\n\nAdditionally, you can support other GitHub Actions I have published:\n\n- [Stack Deploy Action](https://github.com/cssnr/stack-deploy-action?tab=readme-ov-file#readme)\n- [Portainer Stack Deploy](https://github.com/cssnr/portainer-stack-deploy-action?tab=readme-ov-file#readme)\n- [VirusTotal Action](https://github.com/cssnr/virustotal-action?tab=readme-ov-file#readme)\n- [Mirror Repository Action](https://github.com/cssnr/mirror-repository-action?tab=readme-ov-file#readme)\n- [Update Version Tags Action](https://github.com/cssnr/update-version-tags-action?tab=readme-ov-file#readme)\n- [Update JSON Value Action](https://github.com/cssnr/update-json-value-action?tab=readme-ov-file#readme)\n- [Parse Issue Form Action](https://github.com/cssnr/parse-issue-form-action?tab=readme-ov-file#readme)\n- [Cloudflare Purge Cache Action](https://github.com/cssnr/cloudflare-purge-cache-action?tab=readme-ov-file#readme)\n- [Mozilla Addon Update Action](https://github.com/cssnr/mozilla-addon-update-action?tab=readme-ov-file#readme)\n- [Docker Tags Action](https://github.com/cssnr/docker-tags-action?tab=readme-ov-file#readme)\n- [Package Changelog Action](https://github.com/cssnr/package-changelog-action?tab=readme-ov-file#readme)\n- [NPM Outdated Check Action](https://github.com/cssnr/npm-outdated-action?tab=readme-ov-file#readme)\n\nFor a full list of current projects to support visit: [https://cssnr.github.io/](https://cssnr.github.io/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcssnr%2Fportainer-stack-deploy-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcssnr%2Fportainer-stack-deploy-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcssnr%2Fportainer-stack-deploy-action/lists"}