{"id":19241443,"url":"https://github.com/axa-group/arm-template-merge","last_synced_at":"2025-04-21T08:32:42.061Z","repository":{"id":32893802,"uuid":"145085281","full_name":"axa-group/arm-template-merge","owner":"axa-group","description":"Azure Resource Manager (ARM) templates merging tool","archived":false,"fork":false,"pushed_at":"2023-03-04T02:47:50.000Z","size":389,"stargazers_count":12,"open_issues_count":5,"forks_count":4,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-01T11:53:44.494Z","etag":null,"topics":["arm","azure","azure-resource-manager","cli","hacktoberfest","merge","template"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/axa-group.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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}},"created_at":"2018-08-17T07:09:38.000Z","updated_at":"2023-10-16T12:37:48.000Z","dependencies_parsed_at":"2024-11-09T17:11:45.620Z","dependency_job_id":"e23e9231-ef8c-4871-8975-1e779320883e","html_url":"https://github.com/axa-group/arm-template-merge","commit_stats":{"total_commits":42,"total_committers":5,"mean_commits":8.4,"dds":"0.33333333333333337","last_synced_commit":"4594ed176e29a76d9adcf6c83939b5c5ca15b4e1"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axa-group%2Farm-template-merge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axa-group%2Farm-template-merge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axa-group%2Farm-template-merge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/axa-group%2Farm-template-merge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/axa-group","download_url":"https://codeload.github.com/axa-group/arm-template-merge/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249736600,"owners_count":21318280,"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":["arm","azure","azure-resource-manager","cli","hacktoberfest","merge","template"],"created_at":"2024-11-09T17:11:28.909Z","updated_at":"2025-04-21T08:32:41.713Z","avatar_url":"https://github.com/axa-group.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `arm-template-merge`\n\n[![npm package](https://img.shields.io/npm/v/arm-template-merge.svg?logo=npm)](https://www.npmjs.com/package/arm-template-merge)\n[![Node.js version](https://img.shields.io/node/v/arm-template-merge.svg)](https://nodejs.org/)\n\n\u003e _Azure Resource Manager (ARM) Template Merge_\n\nThis tool merges multiple [Azure Resource Manager (ARM) template](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authoring-templates) files into a single template file.\n\nAlthough [linked templates](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-linked-templates) may be used for combining multiple resources into a single deployment, they have some drawbacks:\n\n- All linked templates must be accessible via a public URL so Azure Resource Manager can reach them during deployment, which may not be possible or cumbersome on some scenarios.\n- Each linked template is resolved as a separate deployment, which may not be desired.\n- Only the [incremental deployment mode](https://docs.microsoft.com/en-us/azure/azure-resource-manager/deployment-modes) is allowed for linked templates.\n\n## Prerequisites\n\n- [Node.js 12.0+](https://nodejs.org/)\n\n## How to use\n\nInstall the CLI globally:\n\n```shell\nnpm install -g arm-template-merge\n```\n\nThen run `arm-template-merge` without any arguments for details on its utilization.\n\nAlternatively, you can execute the CLI without installing it by running:\n\n```shell\nnpx arm-template-merge\n```\n\n### Adding it as a dependency\n\nYou may add it to your project as a dependency:\n\n```shell\nnpm install arm-template-merge\n```\n\nAnd use the merge functionality from your code:\n\n```javascript\nconst fs = require('fs');\nconst mergeARMTemplates = require('arm-template-merge');\n\nlet template1 = JSON.parse(fs.readFileSync('template1.json', 'utf8'));\nlet template2 = JSON.parse(fs.readFileSync('template2.json', 'utf8'));\n\nlet merged = {};\nmerged = mergeARMTemplates(merged, template1);\nmerged = mergeARMTemplates(merged, template2);\n\nfs.writeFileSync('merged-template.json', JSON.stringify(merged), 'utf8');\n```\n\n## Rules\n\nThe following rules are used for merging ARM template files:\n\n- All files MUST share the same exact values for the following fields:\n\n  - `$schema`\n  - `contentVersion`\n  - `apiProfile` (if present)\n\n- All files' `functions` and `resources` collections will each be combined into a single collection. Objects within a collection that are exact copies will yield a single object in the merged collection:\n\n  ```text\n  [                    |    [                    |    [\n    { \u003cobject-A\u003e },  --|-------------------------|--\u003e   { \u003cobject-A\u003e },\n                       |      { \u003cobject-B\u003e },  --|--\u003e   { \u003cobject-B\u003e },\n    { \u003cobject-C\u003e },    |      { \u003cobject-C\u003e },    |      { \u003cobject-C\u003e }\n  ]                    |    ]                    |    ]\n  ```\n\n- All files' `parameters`, `variables` and `outputs` objects will each be combined into a single object. Files declaring the same key within an object MUST have the same exact value, or an error will be thrown:\n\n  ```text\n  {                    |    {                    |    {\n    \"A\": \u003cvalue-A\u003e,  --|-------------------------|--\u003e   \"A\": \u003cvalue-A\u003e,\n                       |      \"B\": \u003cvalue-B\u003e,  --|--\u003e   \"B\": \u003cvalue-B\u003e,\n    \"C\": \u003cvalue-C\u003e,    |      \"C\": \u003cvalue-C\u003e,    |      \"C\": \u003cvalue-C\u003e\n    \"D\": \u003cvalue-D1\u003e    |      \"D\": \u003cvalue-D2\u003e    |      \u003c\u003c\u003c ERROR \u003e\u003e\u003e\n  }                    |    }                    |    }\n  ```\n\n- Value and object equality follows Node.js' [`assert.deepStrictEqual()`](https://nodejs.org/api/assert.html#assert_assert_deepstrictequal_actual_expected_message) rules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxa-group%2Farm-template-merge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faxa-group%2Farm-template-merge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faxa-group%2Farm-template-merge/lists"}