Skip to content

Commit f2032b1

Browse files
author
Colby Swandale
authored
Merge pull request #1 from rubyapi/colby/github-actions
GitHub Actions
2 parents 611774b + d397105 commit f2032b1

File tree

5 files changed

+166
-1
lines changed

5 files changed

+166
-1
lines changed

.github/workflows/main.yml

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
name: AWS SAM
2+
3+
on:
4+
push:
5+
paths-ignore:
6+
- '**.md'
7+
pull_request:
8+
types:
9+
- opened
10+
- synchronize
11+
paths-ignore:
12+
- '**.md'
13+
14+
env:
15+
SAM_CLI_TELEMETRY: 0
16+
17+
jobs:
18+
build:
19+
name: Build
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: actions/checkout@v2
23+
- name: Configure AWS credentials
24+
id: creds
25+
uses: aws-actions/configure-aws-credentials@v1
26+
with:
27+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
28+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
29+
aws-region: ${{ secrets.AWS_REGION }}
30+
- name: Setup Ruby
31+
uses: ruby/setup-ruby@v1
32+
with:
33+
bundler-cache: true
34+
- name: SAM Validate
35+
run: |
36+
sam validate
37+
- name: Run Tests
38+
run: |
39+
bundle exec rake test
40+
- name: SAM Build
41+
run: |
42+
sam build
43+
- name: Package SAM Build
44+
run: |
45+
tar -cvf sam-build.tar .aws-sam
46+
- name: Upload SAM Build
47+
uses: actions/upload-artifact@v2
48+
with:
49+
name: sam-build
50+
retention-days: 7
51+
path: sam-build.tar
52+
53+
deployStaging:
54+
name: Deploy to Staging
55+
runs-on: ubuntu-latest
56+
needs: build
57+
environment:
58+
name: Staging
59+
steps:
60+
- uses: actions/checkout@v2
61+
- name: Configure AWS credentials
62+
id: creds
63+
uses: aws-actions/configure-aws-credentials@v1
64+
with:
65+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
66+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
67+
aws-region: ${{ secrets.AWS_REGION }}
68+
- uses: actions/download-artifact@v2
69+
with:
70+
name: sam-build
71+
- name: Unpack SAM Build
72+
run: tar -xvf sam-build.tar
73+
- name: SAM Deploy
74+
run: |
75+
sam deploy --region ${{ secrets.AWS_REGION }} --stack-name ${{ secrets.AWS_STACK_NAME }} --capabilities CAPABILITY_NAMED_IAM --s3-bucket ${{ secrets.AWS_S3_BUCKET }} --role-arn ${{ secrets.AWS_ROLE_ARN }} --s3-prefix ${{ secrets.AWS_S3_PREFIX }} --no-confirm-changeset --tags "environment=staging"
76+
77+
deployProduction:
78+
name: Deploy to Production
79+
runs-on: ubuntu-latest
80+
needs: deployStaging
81+
environment:
82+
name: Production
83+
steps:
84+
- uses: actions/checkout@v2
85+
- name: Configure AWS credentials
86+
id: creds
87+
uses: aws-actions/configure-aws-credentials@v1
88+
with:
89+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
90+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
91+
aws-region: ${{ secrets.AWS_REGION }}
92+
- uses: actions/download-artifact@v2
93+
with:
94+
name: sam-build
95+
- name: Unpack SAM Build
96+
run: tar -xvf sam-build.tar
97+
- name: SAM Deploy
98+
run: |
99+
sam deploy --region ${{ secrets.AWS_REGION }} --stack-name ${{ secrets.AWS_STACK_NAME }} --capabilities CAPABILITY_NAMED_IAM --s3-bucket ${{ secrets.AWS_S3_BUCKET }} --role-arn ${{ secrets.AWS_ROLE_ARN }} --s3-prefix ${{ secrets.AWS_S3_PREFIX }} --no-confirm-changeset --tags "environment=production"

.ruby-version

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2.7.2

Gemfile

+5-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
source "https://rubygems.org"
22

3-
gem "test-unit", group: :test
3+
gem "rake"
4+
5+
group :test do
6+
gem "test-unit"
7+
end

Gemfile.lock

+2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ GEM
22
remote: https://rubygems.org/
33
specs:
44
power_assert (1.2.0)
5+
rake (13.0.3)
56
test-unit (3.3.6)
67
power_assert
78

89
PLATFORMS
910
ruby
1011

1112
DEPENDENCIES
13+
rake
1214
test-unit
1315

1416
BUNDLED WITH

aws/deploy-stack.yml

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
Parameters:
2+
UserName:
3+
Description: SAM Application Deployment user
4+
Type: String
5+
6+
Resources:
7+
DeployUser:
8+
Type: AWS::IAM::User
9+
Properties:
10+
UserName: !Ref UserName
11+
ManagedPolicyArns:
12+
- arn:aws:iam::aws:policy/IAMReadOnlyAccess
13+
Policies:
14+
- PolicyName: !Sub '${AWS::StackName}-deploy-bucket'
15+
PolicyDocument:
16+
Version: "2012-10-17"
17+
Statement:
18+
- Effect: Allow
19+
Action:
20+
- 'cloudformation:*'
21+
Resource: !Sub 'arn:aws:cloudformation:us-east-1:${AWS::AccountId}:stack/rubyapi-repl*'
22+
- Effect: Allow
23+
Action:
24+
- 'iam:PassRole'
25+
Resource: '*'
26+
- Effect: Allow
27+
Action:
28+
- 's3:PutObject'
29+
- 's3:GetObject'
30+
Resource: !Join
31+
- '/'
32+
- - !GetAtt DeployBucket.Arn
33+
- '*'
34+
35+
DeployBucket:
36+
Type: AWS::S3::Bucket
37+
38+
DeployRole:
39+
Type: AWS::IAM::Role
40+
Properties:
41+
AssumeRolePolicyDocument:
42+
Version: "2012-10-17"
43+
Statement:
44+
- Effect: Allow
45+
Action:
46+
- 'sts:AssumeRole'
47+
Principal:
48+
Service: 'cloudformation.amazonaws.com'
49+
50+
Path: /
51+
Description: Deployment role for Ruby API REPL service
52+
ManagedPolicyArns:
53+
- arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
54+
- arn:aws:iam::aws:policy/IAMFullAccess
55+
- arn:aws:iam::aws:policy/AWSLambda_FullAccess
56+
- arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator
57+
- arn:aws:iam::aws:policy/AmazonS3FullAccess
58+
- arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess
59+
RoleName: !Sub '${AWS::StackName}'

0 commit comments

Comments
 (0)