{"id":13506749,"url":"https://github.com/acidjazz/aeonian","last_synced_at":"2025-03-30T05:31:21.274Z","repository":{"id":57142103,"uuid":"94741867","full_name":"acidjazz/aeonian","owner":"acidjazz","description":"Continuous deployment assistance for S3 + CloudFront environments","archived":false,"fork":false,"pushed_at":"2020-05-13T20:36:10.000Z","size":1028,"stargazers_count":44,"open_issues_count":1,"forks_count":12,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T07:44:37.104Z","etag":null,"topics":["aeonian","aws-sdk","bucket","circleci","cloudfront","git-flow","ora"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/acidjazz.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}},"created_at":"2017-06-19T06:03:06.000Z","updated_at":"2023-06-24T11:47:36.000Z","dependencies_parsed_at":"2022-09-05T18:51:21.370Z","dependency_job_id":null,"html_url":"https://github.com/acidjazz/aeonian","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidjazz%2Faeonian","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidjazz%2Faeonian/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidjazz%2Faeonian/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidjazz%2Faeonian/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acidjazz","download_url":"https://codeload.github.com/acidjazz/aeonian/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246281099,"owners_count":20752203,"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":["aeonian","aws-sdk","bucket","circleci","cloudfront","git-flow","ora"],"created_at":"2024-08-01T01:00:56.670Z","updated_at":"2025-03-30T05:31:20.890Z","avatar_url":"https://github.com/acidjazz.png","language":"JavaScript","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/ae.png\" alt=\"Aeonian Logo\"/\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003e æonian\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/automate.png\"/\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/your.png\"/\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/s3.png\"/\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/plus.png\"/\u003e\n  \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/media/cf.png\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003eContinuous Deployment for your AWS S3 + CloudFront environments\u003c/p\u003e\n\n\u003e still in early development\n\n[![npm version](https://badge.fury.io/js/aeonian.svg)](https://badge.fury.io/js/aeonian)\n[![GitHub issues](https://img.shields.io/github/issues/acidjazz/aeonian.svg)](https://github.com/acidjazz/aeonian/issues)\n[![GitHub license](https://img.shields.io/badge/license-Apache%202-blue.svg)](https://raw.githubusercontent.com/acidjazz/aeonian/master/license)\n[![CircleCI](https://img.shields.io/circleci/project/github/acidjazz/aeonian.svg)](https://circleci.com/gh/acidjazz/aeonian/)\n[![Join the chat at https://gitter.im/aws-aeonian/Lobby](https://badges.gitter.im/aws-aeonian/Lobby.svg)](https://gitter.im/aws-aeonian/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n\n[![NPM](https://nodei.co/npm/aeonian.png)](https://nodei.co/npm/aeonian/)\n\nI've built this to help supply a continuous delivery [git-flow](http://nvie.com/posts/a-successful-git-branching-model/) workflow hosted on an AWS serverless setup \n\n###  What does this do? \nRunning `.deploy('{environment}')` will do the following:\n1. Create a new S3 bucket `{prefix}-{commit-hash}-{environment}` based on the current repo and config\n2. Upload the contents of a local directory you specified as `localDir` \n3. Configure the newly created bucket as a static website \n4. Change the origin of the CloudFront ID associated to point to our new bucket's website URL\n5. Initiate an invalidation on `*` making the Distribution pull the new bucket's content\n6. Delete the previous bucket that was assigned as the origin as to not leave a trail of buckets\n\n### Example\nLet's say you have a script `operations/aeonian.js` with the following\n```javascript\nrequire('aeonian').config({\n  bucket: {\n    localDir: './dist/',\n    prefix: 'mysite-'\n  },\n  website: {\n    index: 'index.html',\n    error: 'error/index.html',\n  },\n  environments: {\n    staging: 'CLOUDFRONT_ID',\n    production: 'CLOUDFRONT_ID',\n  }\n}).deploy(process.argv[2])\n```\nRunning `node operations/aeonian.js staging` this would result in\n\u003cp align=\"center\"\u003e\n \u003cimg src=\"https://github.com/acidjazz/aeonian/raw/master/demo.gif\" alt=\"Aeonian Demo\"/\u003e\n\u003c/p\u003e\n\nWhich would deploy `./dist/` to your S3+CF `staging` environment\n\n### Installation\n\n* Install the aeonian package\n`npm install aeonian` or `yarn add aeonian`\n* Set the current environment variables to your AWS key and secret for the [AWS JS SDK](https://aws.amazon.com/sdk-for-node-js/)\n  * `AWS_ACCESS_KEY_ID`\n  * `AWS_SECRET_ACCESS_KEY`\n  * Other options on this step can be found [here](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-node.html)\n\n### CircleCI Integration\nThis is mostly why aeonian exists, to deploy based on commits.  Based on the example above, lets say you have the above script `operations/aeonian.js` in your repo.  you could then add the following to your `package.json`\n```javascript\n\"scripts\": {\n  ...\n  \"staging\": \"node operations/aeonian.js staging\",\n  \"production\": \"node operations/aeonian.js production\",\n  ...\n},\n```\nAfter setting your AWS credentials on CircleCi, you could add something like this to your `circle.yml`\n```yaml\ndeployment:\n  staging:\n    branch: staging\n    commands:\n      - npm run staging\n  production:\n    branch: master\n    commands:\n      - npm run production\n```\n* Any commit/PR merge to the `staging` branch would deploy the `staging` environment\n* Any commit/PR merge to the `master` branch would deploy the `production` environment\n\n### Nuxt.js Integration\nThe main reason I built aeonian is for my all of my [Nuxt.js](https://nuxtjs.org/) projects. I have the following commands in my `package.json` that I have CircleCI run based on environment\n\n```javascript\n  \"scripts\": {\n    ...\n    \"production\": \"yarn generate; node operations/aeonian.js production\",\n    \"staging\": \"yarn generate; node operations/aeonian.js staging\",\n    ...\n  },\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facidjazz%2Faeonian","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facidjazz%2Faeonian","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facidjazz%2Faeonian/lists"}