{"id":13840357,"url":"https://github.com/foremast/foremast","last_synced_at":"2025-04-12T19:58:04.284Z","repository":{"id":32603248,"uuid":"65238442","full_name":"foremast/foremast","owner":"foremast","description":"Spinnaker Pipeline/Infrastructure Configuration and Templating Tool - Pipelines as Code.","archived":false,"fork":false,"pushed_at":"2022-10-25T02:27:22.000Z","size":3795,"stargazers_count":280,"open_issues_count":0,"forks_count":46,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-04-12T19:57:58.627Z","etag":null,"topics":["aws","devops","gcp","hacktoberfest","pipelines-as-code","python","spinnaker"],"latest_commit_sha":null,"homepage":"https://foremast.readthedocs.io/","language":"Python","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/foremast.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-08T20:52:07.000Z","updated_at":"2024-01-04T16:06:44.000Z","dependencies_parsed_at":"2022-08-27T00:50:37.674Z","dependency_job_id":null,"html_url":"https://github.com/foremast/foremast","commit_stats":null,"previous_names":["gogoair/foremast"],"tags_count":267,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foremast%2Fforemast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foremast%2Fforemast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foremast%2Fforemast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/foremast%2Fforemast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/foremast","download_url":"https://codeload.github.com/foremast/foremast/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625509,"owners_count":21135513,"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":["aws","devops","gcp","hacktoberfest","pipelines-as-code","python","spinnaker"],"created_at":"2024-08-04T17:00:46.383Z","updated_at":"2025-04-12T19:58:04.252Z","avatar_url":"https://github.com/foremast.png","language":"Python","readme":"Spinnaker Foremast\n==================\n\n\n.. image:: https://github.com/foremast/foremast/actions/workflows/githubactions-tox.yml/badge.svg\n    :target: https://github.com/foremast/foremast/actions/workflows/githubactions-tox.yml\n\n.. image:: https://github.com/foremast/foremast/actions/workflows/codeql-analysis.yml/badge.svg\n    :target: https://github.com/foremast/foremast/actions/workflows/codeql-analysis.yml\n\n.. image:: https://badges.gitter.im/foremast/foremast.svg\n   :alt: Join the chat at https://gitter.im/foremast/foremast\n   :target: https://gitter.im/foremast/foremast?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge\n\n.. image:: https://badge.fury.io/py/foremast.svg\n    :target: https://badge.fury.io/py/foremast\n\nForemast is a Spinnaker pipeline and infrastructure configuration and\ntemplating tool.  Just create a couple JSON configuration files and then\nmanually creating Spinnaker pipelines becomes a thing of the past.\n\n.. image:: _docs/_static/Foremast+Logo-text-300.png\n   :align: center\n\n\nWhy Foremast?\n-------------\n\n- No manual creation of pipelines in the Spinnaker UI\n- Reproducible and versioned Spinnaker pipelines\n- Standardized pipelines with flexibilty for application specific needs\n\nWith Foremast, Developers create a couple simple JSON configs per application.\nThese configs provide details on the pipeline and infrastructure specific to\nthe application's needs.  Foremast takes those configs, renders some Jinja2\ntemplates, and then acts as a client for the Spinnaker Gate API. Foremast comes\nwith generic templates for creating a simple pipeline but it can also point to\nexternal templates for custom pipelines that fit any workflow.\n\nForemast Features\n-----------------\n\n- Dynamically generate Spinnaker pipelines based on JSON configs\n- Customizable pipelines through external Jinja2 Templates, see `Foremast templates`_ for examples\n- Dynamically generate AWS infrastructure based on pipeline configs\n- Set up resources not defined in Spinnaker, such as S3 buckets and IAM roles\n- Support for AWS Lambda pipelines\n\nGetting Started\n---------------\n\nTake a look at `quick start guide`_ for a quick introduction on how to use\nForemast.\n\nWe also have a blog post to help you get started: `Automate Spinnaker Pipeline Creation`_\n\nDocumentation\n~~~~~~~~~~~~~\n\nAll the documentation can be viewed on `Read the Docs`_. You can find all\nconfiguration options, code information, and better examples there.\n\nDevelopment\n~~~~~~~~~~~\n\nSee the `contribution guide`_ for information on code style, contributing, and\ntesting.\n\nGetting Help\n~~~~~~~~~~~~~\n\nFor questions, support, or friendly conversation you can find us on `Gitter`_.\n\nMore Details\n------------\n\nInstalling\n~~~~~~~~~~\n\nInstalling the package will provide CLI commands for convenience.\n\n.. code-block:: bash\n\n   virtualenv -p python3 venv\n   source venv/bin/activate\n   pip install foremast\n\nEntry Points\n~~~~~~~~~~~~~\n\nForemast has a few easy to use CLI endpoints.\n\n- ``foremast-pipeline`` - Creates an application and pipeline Spinnaker\n- ``foremast-infrastructure`` - Sets up AWS infrastructure like s3, iam, elb,\n  and security groups\n- ``foremast-pipeline-onetime`` - Generates a pipeline for deploying to one\n  specific account\n- ``foremast-scaling-policy`` - Creates and attaches a scaling policy to an\n  application server group.\n- ``foremast-pipeline-rebuild`` - rebuild pipelines after changes have been\n  made\n\nYou can run any of these entries points from the command line. They rely on\nenvironment variables and are ideal for running in a Jenkins job\n\n.. code-block:: bash\n\n    PROJECT=forrest GIT_REPO=core RUNWAY_DIR=path/to/pipeline_configs foremast-pipeline\n\nForemast Configuration\n~~~~~~~~~~~~~~~~~~~~~~\n\nA file at ``{pwd}/.foremast/foremast.cfg``, ``~/.foremast/foremast.cfg``, or\n``/etc/foremast/foremast.cfg`` needs to exist in order to run foremast.\n\n.. code-block:: bash\n\n    [base]\n    domain = example.com\n    envs = dev,stage,prod\n    regions = us-east-1\n    gate_api_url = http://gate.example.com:8084\n\nRunway Configuration Files\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nTo begin using Foremast, you must have a few JSON configuration files defined\nfor each application\n\npipeline.json\n^^^^^^^^^^^^^\n\nThis file will be needed for each application. Foremast has a lot of defaults\nin place for ``pipeline.json``, take a look at the `pipeline.json`_ docs for\nall options.\n\n*Minimum*\n\n.. code-block:: json\n\n    {\n        \"deployment\": \"spinnaker\"\n    }\n\n*Example Deployment Environments Override*\n\nCustom deployment environment order and selection can be provided in the\n``env`` key. When missing, the default provided is ``{\"env\": [\"stage\",\n\"prod\"]}``. Here, the order matters and Pipeline will be generated in the given\norder.\n\n.. code-block:: json\n\n    {\n        \"deployment\": \"spinnaker\",\n        \"env\": [\n            \"prod\"\n        ]\n    }\n\napplication-master-{env}.json\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nEach deployment environment specified in the ``pipeline.json`` file will need\nan accompanying ``application-master-{env}.json`` file in the same directory.\n\nThe \\`application-master-{env} files have a lot of exposed values with sane\ndefaults. Please take a look at the `application.json`_ docs for all options.\n\n*application-master-{env}.json example*\n\n.. code-block:: json\n\n    {\n      \"security_group\": {\n        \"description\": \"something useful\",\n        \"elb_extras\": [\"sg_offices\"],\n        \"ingress\": {\n        },\n        \"egress\": \"0.0.0.0/0\"\n      },\n      \"app\": {\n        \"instance_type\": \"t2.small\",\n        \"app_description\": \"Edge Forrest Demo application\",\n        \"instance_profile\": \"forrest_edge_profile\"\n      },\n      \"elb\": {\n        \"subnet_purpose\": \"internal\",\n        \"target\": \"TCP:8080\",\n        \"ports\": [\n          {\"loadbalancer\": \"HTTP:80\", \"instance\": \"HTTP:8080\"}\n        ]\n      },\n      \"asg\": {\n        \"subnet_purpose\": \"internal\",\n        \"min_inst\": 1,\n        \"max_inst\": 1,\n        \"scaling_policy\": {\n            \"metric\": \"CPUUtilization\",\n            \"threshold\": 90,\n            \"period_minutes\": 10,\n            \"statistic\": \"Average\"\n            }\n      },\n      \"regions\": [\"us-east-1\"],\n      \"dns\" : {\n        \"ttl\": 120\n        }\n    }\n\n.. _`Foremast templates`: https://github.com/foremast/foremast-template-examples/\n.. _`quick start guide`: http://foremast.readthedocs.io/en/latest/getting_started.html#quick-start-guide\n.. _`automate spinnaker pipeline creation`: https://tech.gogoair.com/foremast-automate-spinnaker-pipeline-creation-2b2aa7b2c5e4#.qplfw19cg\n.. _`Read the Docs`: http://foremast.readthedocs.io/en/latest/\n.. _`contribution guide`: http://foremast.readthedocs.io/en/latest/CONTRIBUTING.html\n.. _`Gitter`: https://gitter.im/foremast/foremast\n.. _`pipeline.json`: http://foremast.readthedocs.io/en/latest/configuration_files/pipeline_json/index.html\n.. _`application.json`: http://foremast.readthedocs.io/en/latest/configuration_files/application_json.html\n","funding_links":[],"categories":["Tools"],"sub_categories":["Tutorials"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforemast%2Fforemast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforemast%2Fforemast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforemast%2Fforemast/lists"}