Skip to content

Commit 254190e

Browse files
committed
fix: TT-513 master rebase
2 parents 4dd2f95 + 4a8aa30 commit 254190e

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+33635
-326
lines changed

.dockerignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
node_modules
2+
.github
3+
dist
4+
coverage
5+
Makefile
6+
.gitignore
7+
*keys.ts
8+
*.keys.json
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
name: time-tracker-ui-cd-prod
2+
3+
on:
4+
release:
5+
types:
6+
- published
7+
8+
jobs:
9+
cd:
10+
runs-on: ubuntu-latest
11+
env:
12+
TF_WORKSPACE: prod
13+
WORKING_DIR: infrastructure/
14+
ARM_CLIENT_ID: ${{secrets.TF_ARM_CLIENT_ID}}
15+
ARM_CLIENT_SECRET: ${{secrets.TF_ARM_CLIENT_SECRET}}
16+
ARM_SUBSCRIPTION_ID: ${{secrets.TF_ARM_SUBSCRIPTION_ID}}
17+
ARM_TENANT_ID: ${{secrets.TF_ARM_TENANT_ID}}
18+
19+
steps:
20+
- name: Checkout
21+
uses: actions/checkout@v3
22+
23+
- name: Get the release_version
24+
run: |
25+
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
26+
echo $RELEASE_VERSION
27+
- name: Login to azure
28+
uses: Azure/login@v1
29+
with:
30+
creds: ${{ secrets.AZURE_CREDENTIALS }}
31+
32+
- name: Build the docker image
33+
run: make build
34+
35+
- name: Publish docker image to prod azure container registry
36+
run: |
37+
make login publish acr=timetrackerserviceprodregistry image_tag=$RELEASE_VERSION
38+
- name: Setup terraform
39+
uses: hashicorp/setup-terraform@v1
40+
41+
- name: Authenticate with the TF modules repository
42+
uses: webfactory/[email protected]
43+
with:
44+
ssh-private-key: ${{ secrets.INFRA_TERRAFORM_MODULES_SSH_PRIV_KEY }}
45+
46+
- name: Terraform Init
47+
working-directory: ${{ env.WORKING_DIR }}
48+
run: terraform init
49+
50+
- name: Terraform Apply
51+
working-directory: ${{ env.WORKING_DIR }}
52+
run: terraform apply -lock=false -var-file="${{ env.TF_WORKSPACE }}.tfvars" -var "image_tag=$RELEASE_VERSION" -auto-approve
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: time-tracker-ui-cd-stage
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*.*.*'
7+
8+
jobs:
9+
cd:
10+
runs-on: ubuntu-latest
11+
env:
12+
TF_WORKSPACE: stage
13+
WORKING_DIR: infrastructure/
14+
ARM_CLIENT_ID: ${{secrets.TF_ARM_CLIENT_ID}}
15+
ARM_CLIENT_SECRET: ${{secrets.TF_ARM_CLIENT_SECRET}}
16+
ARM_SUBSCRIPTION_ID: ${{secrets.TF_ARM_SUBSCRIPTION_ID}}
17+
ARM_TENANT_ID: ${{secrets.TF_ARM_TENANT_ID}}
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v3
21+
- name: Get the release_version
22+
run: |
23+
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
24+
echo $RELEASE_VERSION
25+
- name: Login to azure
26+
uses: Azure/login@v1
27+
with:
28+
creds: ${{ secrets.AZURE_CREDENTIALS }}
29+
- name: Build the docker image
30+
run: make build
31+
- name: Publish docker image to stage azure container registry
32+
run: |
33+
make login publish acr=timetrackerservicestageregistry image_tag=$RELEASE_VERSION
34+
- name: Setup terraform
35+
uses: hashicorp/setup-terraform@v1
36+
- name: Authenticate with the TF modules repository
37+
uses: webfactory/[email protected]
38+
with:
39+
ssh-private-key: ${{ secrets.INFRA_TERRAFORM_MODULES_SSH_PRIV_KEY }}
40+
- name: Terraform Init
41+
working-directory: ${{ env.WORKING_DIR }}
42+
run: terraform init
43+
- name: Terraform Apply
44+
working-directory: ${{ env.WORKING_DIR }}
45+
run: terraform apply -lock=false -var-file="${{ env.TF_WORKSPACE }}.tfvars" -var "image_tag=$RELEASE_VERSION" -auto-approve

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,3 +52,9 @@ Thumbs.db
5252

5353
# stryker temp files
5454
.stryker-tmp
55+
56+
#ENV VARIABLES
57+
.env
58+
59+
# Terraform files
60+
**/.terraform**

Dockerfile

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,49 @@ FROM node:14 AS development
22

33
ENV USERNAME timetracker
44
ENV HOME /home/${USERNAME}
5+
<<<<<<< HEAD
6+
=======
7+
ENV CHROME_BIN /opt/google/chrome/google-chrome
8+
#Essential tools and xvfb
9+
RUN apt-get update && apt-get install -y \
10+
software-properties-common \
11+
unzip \
12+
curl \
13+
wget \
14+
xvfb
15+
16+
#Chrome browser to run the tests
17+
ARG CHROME_VERSION=65.0.3325.181
18+
RUN curl https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add \
19+
&& wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \
20+
&& dpkg -i google-chrome-stable_current_amd64.deb || true
21+
RUN apt-get install -y -f \
22+
&& rm -rf /var/lib/apt/lists/*
23+
24+
#Disable the SUID sandbox so that chrome can launch without being in a privileged container
25+
RUN dpkg-divert --add --rename --divert /opt/google/chrome/google-chrome.real /opt/google/chrome/google-chrome \
26+
&& echo "#! /bin/bash\nexec /opt/google/chrome/google-chrome.real --no-sandbox --disable-setuid-sandbox \"\$@\"" > /opt/google/chrome/google-chrome \
27+
&& chmod 755 /opt/google/chrome/google-chrome
28+
29+
#Chrome Driver
30+
ARG CHROME_DRIVER_VERSION=2.37
31+
RUN mkdir -p /opt/selenium \
32+
&& curl http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -o /opt/selenium/chromedriver_linux64.zip \
33+
&& cd /opt/selenium; unzip /opt/selenium/chromedriver_linux64.zip; rm -rf chromedriver_linux64.zip; ln -fs /opt/selenium/chromedriver /usr/local/bin/chromedriver;
34+
>>>>>>> 4a8aa30f09fdb5fe3693b270317759ccc372de5a
535

636
RUN useradd -ms /bin/bash ${USERNAME}
737

838
WORKDIR ${HOME}/time-tracker-ui
939
COPY . .
1040
RUN rm -f .env
1141
RUN chown ${USERNAME}:${USERNAME} -R ${HOME}/time-tracker-ui
42+
<<<<<<< HEAD
43+
=======
44+
RUN chmod -R 777 ${HOME}/time-tracker-ui
45+
46+
47+
>>>>>>> 4a8aa30f09fdb5fe3693b270317759ccc372de5a
1248

1349
USER ${USERNAME}
1450
RUN npm cache clean --force && npm install

Makefile

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
override SHELL := /bin/bash
2+
3+
.PHONY: help
4+
help: ## Show this help message.
5+
@echo 'Usage:'
6+
@echo ' make [target] ...'
7+
@echo
8+
@echo 'Targets:'
9+
@grep --no-filename -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
10+
sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
11+
12+
.PHONY: build
13+
build: ## Create docker image with dependencies needed for development.
14+
docker-compose build
15+
16+
.PHONY: cleanup
17+
cleanup: ## Delete image timetracker_ui
18+
docker rmi timetracker_ui
19+
20+
.PHONY: run
21+
run: ## Execute timetracker_ui docker containe.
22+
docker-compose --env-file ./.env up -d
23+
24+
.PHONY: logs
25+
logs: ## Show logs of timetracker_ui.
26+
docker logs -f timetracker_ui
27+
28+
.PHONY: stop
29+
stop: ## Stop container timetracker_ui.
30+
docker-compose stop
31+
32+
.PHONY: restart
33+
restart: ## Restart container timetracker_ui.
34+
docker-compose stop
35+
docker-compose up -d
36+
37+
.PHONY: remove
38+
remove: ## Delete container timetracker_ui.
39+
docker-compose down --volumes --remove-orphans --rmi local
40+
41+
.PHONY: test
42+
test: ## Run all tests on docker container timetracker_ui at the CLI.
43+
docker-compose -f docker-compose.yml --env-file ./.env up -d
44+
docker exec timetracker_ui bash -c "npm run ci-test"
45+
46+
.PHONY: testdev
47+
testdev: ## Run all tests on docker container timetracker_ui at the Dev
48+
docker-compose -f docker-compose.yml -f docker-compose.dev.yml --env-file ./.env up -d
49+
docker exec timetracker_ui bash -c "npm run ci-test"
50+
51+
.PHONY: publish
52+
publish: require-acr-arg require-image_tag-arg ## Upload a docker image to the stage azure container registry acr=<name_of_the_azure_container_registry> image_tag=<tag_for_the_image>
53+
docker tag timetracker_ui:latest $(acr).azurecr.io/timetracker_ui:$(image_tag)
54+
docker push $(acr).azurecr.io/timetracker_ui:$(image_tag)
55+
56+
.PHONY: build_prod
57+
build_prod: ## Create docker image with dependencies needed for production.
58+
docker build --target production -t timetracker_ui_prod -f Dockerfile .
59+
60+
.PHONY: run_prod
61+
run_prod: ## Execute timetracker_ui_prod docker container.
62+
docker run -d -p 4200:4200 --name timetracker_ui_prod timetracker_ui_prod
63+
64+
.PHONY: stop_prod
65+
stop_prod: ## Stop container timetracker_ui_prod.
66+
docker stop timetracker_ui_prod
67+
68+
.PHONY: remove_prod
69+
remove_prod: ## Delete container timetracker_ui_prod.
70+
docker stop timetracker_ui_prod
71+
docker rm timetracker_ui_prod
72+
73+
.PHONY: publish_prod
74+
<<<<<<< HEAD
75+
publish_prod: ## Publish the container image timetracker_ui_prod.
76+
docker tag timetracker_ui_prod:$(image_tag) $(registry_url)/timetracker_ui_prod:$(image_tag)
77+
docker push $(registry_url)/timetracker_ui_prod:$(image_tag)
78+
79+
.PHONY: login
80+
login: ## Login in respository of docker images.
81+
az acr login --name $(acr)
82+
=======
83+
publish_prod: require-acr-arg require-image_tag-arg ## Upload a docker image to the prod azure container registry acr=<name_of_the_azure_container_registry> image_tag=<tag_for_the_image>
84+
docker tag timetracker_ui_prod:latest $(acr).azurecr.io/timetracker_ui:$(image_tag)
85+
docker push $(acr).azurecr.io/timetracker_ui:$(image_tag)
86+
87+
.PHONY: login
88+
login: ## Login in respository of docker images.
89+
az acr login --name $(container_registry)
90+
91+
.PHONY: release
92+
release: require-VERSION-arg require-COMMENT-arg ## Creates an pushes a new tag.
93+
git tag -a ${VERSION} -m "${COMMENT}"
94+
git push origin ${VERSION}
95+
96+
require-%-arg:
97+
@if [ -z ${${*}} ]; then \
98+
echo "ERROR: [$*] argument is required, e.g. $*=<value>"; \
99+
exit 1; \
100+
fi
101+
102+
require-%-tool:
103+
@if [ "$(shell command -v ${*} 2> /dev/null)" = "" ]; then \
104+
echo "ERROR: [$*] not found"; \
105+
exit 1; \
106+
fi
107+
>>>>>>> master

docker-compose.dev.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: '3.9'
2+
services:
3+
time-tracker-ui:
4+
user: root
5+
volumes:
6+
- ./src:/home/timetracker/time-tracker-ui/src/
7+
- ./scripts:/home/timetracker/time-tracker-ui/scripts/
8+
- ./e2e:/home/timetracker/time-tracker-ui/e2e/
9+
- ./coverage:/home/timetracker/time-tracker-ui/coverage
10+
- ./angular.json:/home/timetracker/time-tracker-ui/angular.json
11+
- ./karma.conf.js:/home/timetracker/time-tracker-ui/karma.conf.js
12+
- ./package.json:/home/timetracker/time-tracker-ui/package.json
13+
- ./webpack.config.js:/home/timetracker/time-tracker-ui/webpack.config.js

docker-compose.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
version: '3.9'
2+
services:
3+
time-tracker-ui:
4+
container_name: timetracker_ui
5+
image: timetracker_ui
6+
build:
7+
target: development
8+
context: .
9+
dockerfile: ./Dockerfile
10+
ports:
11+
- 4200:4200
12+
- 9876:9876
13+
environment:
14+
CHROME_BIN: /opt/google/chrome/google-chrome
15+
AUTHORITY: ${AUTHORITY}
16+
CLIENT_ID: ${CLIENT_ID}
17+
SCOPES: ${SCOPES}
18+
STACK_EXCHANGE_ID: ${STACK_EXCHANGE_ID}
19+
STACK_EXCHANGE_ACCESS_TOKEN: ${STACK_EXCHANGE_ACCESS_TOKEN}
20+
AZURE_APP_CONFIGURATION_CONNECTION_STRING: ${AZURE_APP_CONFIGURATION_CONNECTION_STRING}
21+
AUTHORITY_JSON: ${AUTHORITY_JSON}
22+
CLIENT_ID_JSON: ${CLIENT_ID_JSON}
23+
SCOPES_JSON: ${SCOPES_JSON}
24+

e2e/protractor.conf.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ exports.config = {
1313
'./src/**/*.e2e-spec.ts'
1414
],
1515
capabilities: {
16-
browserName: 'chrome'
16+
browserName: 'chrome',
17+
'chromeOptions': {
18+
'args': [
19+
'--no-sandbox',
20+
'--headless',
21+
'--window-size=1024,768'
22+
]
23+
}
1724
},
1825
directConnect: true,
1926
baseUrl: 'http://localhost:4200/',
@@ -29,4 +36,4 @@ exports.config = {
2936
});
3037
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
3138
}
32-
};
39+
};

infrastructure/main.tf

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
terraform {
2+
required_version = "~> 1.1.2"
3+
required_providers {
4+
azurerm = {
5+
source = "hashicorp/azurerm"
6+
version = "~> 2.90"
7+
}
8+
}
9+
10+
backend "azurerm" {
11+
resource_group_name = "ioet-infra-tf-state"
12+
storage_account_name = "timetrackertfstate"
13+
container_name = "time-tracker-tf-state"
14+
key = "time-tracker-ui.tfstate"
15+
}
16+
17+
}
18+
19+
provider "azurerm" {
20+
features {}
21+
skip_provider_registration = true
22+
}
23+
24+
data "terraform_remote_state" "service" {
25+
backend = "azurerm"
26+
workspace = terraform.workspace
27+
config = {
28+
resource_group_name = "ioet-infra-tf-state"
29+
storage_account_name = "timetrackertfstate"
30+
container_name = "time-tracker-tf-state"
31+
key = "this.tfstate"
32+
}
33+
}
34+
35+
locals {
36+
common_name = "time-tracker-ui"
37+
environment = terraform.workspace
38+
service_name = "${local.common_name}-${local.environment}"
39+
create_app_service_plan = true
40+
service_plan_kind = "Linux"
41+
image_name = "timetracker_ui"
42+
}
43+
44+
module "ui" {
45+
source = "[email protected]:ioet/infra-terraform-modules.git//azure-app-service?ref=tags/v0.0.5"
46+
app_service_name = local.service_name
47+
create_app_service_plan = local.create_app_service_plan
48+
docker_image_name = "${local.image_name}:${var.image_tag}"
49+
docker_image_namespace = data.terraform_remote_state.service.outputs.container_registry_login_server
50+
docker_registry_password = data.terraform_remote_state.service.outputs.container_registry_admin_password
51+
docker_registry_url = data.terraform_remote_state.service.outputs.container_registry_login_server
52+
docker_registry_username = data.terraform_remote_state.service.outputs.container_registry_admin_username
53+
location = data.terraform_remote_state.service.outputs.container_registry_location
54+
resource_group_name = data.terraform_remote_state.service.outputs.resource_group_name
55+
service_plan_kind = local.service_plan_kind
56+
service_plan_name = local.service_name
57+
service_plan_size = var.service_plan_size
58+
service_plan_tier = var.service_plan_tier
59+
}

0 commit comments

Comments
 (0)