-
Notifications
You must be signed in to change notification settings - Fork 0
137 lines (124 loc) · 4.79 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# .github/workflows/ci.yml
# Continuous Integration (CI) Workflow
name: ci
# This workflow will run whenever we push commits to the `main` branch, or
# whenever there's a pull request to the `main` branch. See:
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#on
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
lint:
# Give your job a name that will show up in the GitHub Actions web UI
name: ESLint
# We'll run this on a Linux (Ubuntu) VM, since we'll deploy on Linux too.
runs-on: ubuntu-latest
# We run these steps one after the other, and if any fail, we stop the process
steps:
# https://github.com/actions/checkout
- name: Check out code
uses: actions/checkout@v4
# https://github.com/actions/setup-node
- name: Setup node
uses: actions/setup-node@v4
with:
# Use node LTS https://github.com/actions/setup-node#supported-version-syntax
node-version: 'lts/*'
# Cache npm dependencies so they don't have to be downloaded next time - https://github.com/actions/setup-node#caching-packages-dependencies
cache: 'npm'
- name: Install node dependencies
# Use `ci` vs. `install`, see https://docs.npmjs.com/cli/v8/commands/npm-ci
run: npm ci
dockerfile-lint:
name: Dockerfile Lint
runs-on: ubuntu-latest
steps:
# https://github.com/marketplace/actions/hadolint-action
- uses: actions/checkout@v4
- uses: hadolint/[email protected]
with:
dockerfile: Dockerfile
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'
- name: Install node dependencies and run Tests
# There are two ways we could do this:
#
# 1. Call `npm ci` followed by `npm test` like so (NOTE: the use of | and -):
# run: |
# - npm install
# - npm test
#
# 2. Use `install-ci-test` to do it in a single command, see https://docs.npmjs.com/cli/v8/commands/npm-install-ci-test
# run: npm install-ci-test
run: npm install-ci-test
integration-tests:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 'lts/*'
cache: 'npm'
- name: Install node dependencies
# NOTE: we need to install dev dependencies too vs. production only for hurl
run: npm install
- name: Build Containers
run: docker compose up -d
# Added this for making script executable .
- name: Make local-aws-setup.sh executable
run: chmod +x ./scripts/local-aws-setup.sh
- name: Setup Local AWS Resources
# NOTE: this file needs to be made executable *before* you check into git:
# $ chmod +x ./scripts/local-aws-setup.sh
run: ./scripts/local-aws-setup.sh
- name: Run Hurl Tests
run: npm run test:integration
docker-hub:
name: Build and Push to Docker Hub
# Don't run this job any of the above three job passes
needs: [lint, dockerfile-lint, unit-tests, integration-tests]
runs-on: ubuntu-latest
steps:
# Set up buildx for optimal Docker Builds
# https://github.com/docker/setup-buildx-action
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# Login to Docker Hub using Github secrets
# https://github.com/docker/login-action
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME}}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
env:
# Define an Environment Variable with the current git commit's
# Replace `username` with your Docker Hub username and `fragments
# with whatever you've named your Docker Hub repo
DOCKERHUB_REPO: hpatel292/fragments
# Define an Environment Variable with the current git commit's
# sha: sha-87f664e01bb5f242faa411e9e7fb9e75a58ae767
# Use the `github` context to get this, see:
# https://docs.github.com/en/actions/learn-github-actions/contexts#github-context
SHA_TAG: sha-${{ github.sha }}
uses: docker/build-push-action@v4
with:
push: true
# Use 3 tags :sha-sha-7d821bd14e0d6c381dc57a5369ae1a3a9220664f, :main, and :latest
tags: ${{ env.DOCKERHUB_REPO }}:${{ env.SHA_TAG }}, ${{ env.DOCKERHUB_REPO }}:main, ${{ env.DOCKERHUB_REPO }}:latest