Skip to content

Commit

Permalink
Feat/github actions
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreasGassmann authored and godenzim committed Sep 6, 2021
1 parent 225b2cc commit cd70071
Show file tree
Hide file tree
Showing 81 changed files with 1,647 additions and 350 deletions.
67 changes: 67 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
name: Build and Deploy

on: push

jobs:
build_angular:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Cache node modules
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Node 14
uses: actions/setup-node@v1
with:
node-version: 14.x

- name: Prepare
run: |
npm ci
npm run prepare-prod-build
- name: Prettier
run: npm run actions:prettier

- name: Build
run: npm run build -- --prod

- name: Upload
uses: actions/upload-artifact@v1
with:
name: angular_dist
path: www

deploy_github_pages:
needs: build_angular
if: github.ref == 'refs/heads/feat/github-actions'
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v2

- name: Cache node modules
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
- name: Node 14
uses: actions/setup-node@v1
with:
node-version: 14.x

- name: Prepare
run: npm ci

- name: Deploy Github Pages
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run actions:deploy
144 changes: 128 additions & 16 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
image: docker:latest

variables:
TEST_TAG: test_$CI_COMMIT_SHA
GOOGLE_TAG: eu.gcr.io/papers-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_COMMIT_SHA
GOOGLE_TAG_LATEST: eu.gcr.io/papers-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:latest
GOOGLE_TAG_DEV: eu.gcr.io/papers-dev-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAMESPACE:$CI_COMMIT_SHA
GOOGLE_TAG_LATEST_DEV: eu.gcr.io/papers-dev-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAMESPACE:latest
GOOGLE_TAG_ANDROID_CURRENT: eu.gcr.io/papers-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:android-$CI_COMMIT_SHA
GOOGLE_TAG_ELECTRON_LINUX_CURRENT: eu.gcr.io/papers-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:electron-linux-$CI_COMMIT_SHA
GOOGLE_TAG_ELECTRON_WINDOWS_CURRENT: eu.gcr.io/papers-kubernetes/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:electron-windows-$CI_COMMIT_SHA
Expand All @@ -10,22 +14,23 @@ stages:
- build
- test
- qa
- native_build
- platform_build
- publish
- deploy

build_ionic:
stage: build
script:
- docker build -t $GOOGLE_TAG .
- docker build -t $TEST_TAG .
tags:
- docker

unit:
allow_failure: true
stage: test
script:
- docker run --name unit-$CI_COMMIT_SHA $GOOGLE_TAG npm run test-ci
- docker run --name lint-$CI_COMMIT_SHA $GOOGLE_TAG npm run lint-ci
- docker run --name unit-$CI_COMMIT_SHA $TEST_TAG npm run test-ci
- docker run --name lint-$CI_COMMIT_SHA $TEST_TAG npm run lint-ci
- docker cp unit-$CI_COMMIT_SHA:/app/src/coverage/report-lcov/lcov.info lcov.info
- docker cp lint-$CI_COMMIT_SHA:/app/lintReport.json lintReport.json
after_script:
Expand All @@ -41,7 +46,7 @@ unit:
qa:
stage: qa
script:
- docker create --name qa-$CI_PIPELINE_ID $GOOGLE_TAG npm run sonar-scanner -- -X
- docker create --name qa-$CI_PIPELINE_ID $TEST_TAG npm run sonar-scanner -- -X
-Dsonar.typescript.lcov.reportPaths=lcov.info
-Dsonar.typescript.tslint.reportPaths=lintReport.json
-Dsonar.test.inclusions=**/*.spec.ts
Expand All @@ -62,8 +67,8 @@ qa:
tags:
- docker

build_android:
stage: native_build
build-android:
stage: platform_build
when: manual
tags:
- docker
Expand All @@ -82,8 +87,8 @@ build_android:
- airgap-wallet-release-unsigned-$CI_PIPELINE_ID.apk
- airgap-wallet-debug-$CI_PIPELINE_ID.apk

build_ios:
stage: native_build
build-ios:
stage: platform_build
when: manual
before_script:
- echo "$IOS_BUILD_JSON" > build.json
Expand All @@ -102,8 +107,8 @@ build_ios:
tags:
- ios

build_mac:
stage: native_build
build-mac:
stage: platform_build
when: manual
script:
- 'sed -i -e "s/\"version\": \"0.0.1\"/\"version\": \"${VERSION}\"/g" electron/package.json'
Expand All @@ -123,8 +128,8 @@ build_mac:
tags:
- ios

build_linux:
stage: native_build
build-linux:
stage: platform_build
when: manual
tags:
- docker
Expand All @@ -141,8 +146,8 @@ build_linux:
paths:
- electron/airgap-wallet-$VERSION.AppImage

build_windows:
stage: native_build
build-windows:
stage: platform_build
when: manual
tags:
- docker
Expand All @@ -161,7 +166,20 @@ build_windows:
- electron/airgap-wallet-$VERSION.exe
- electron/airgap-wallet-$VERSION.exe.blockmap

publish_ios:
build-web:
stage: platform_build
tags:
- docker
script:
- docker build -f build/web/Dockerfile -t $GOOGLE_TAG -t $GOOGLE_TAG_DEV .
only:
- develop
- master
- feat/github-actions
tags:
- docker

publish-ios:
stage: publish
when: manual
before_script:
Expand All @@ -172,3 +190,97 @@ publish_ios:
- xcrun altool --upload-app -f ios/App.ipa -u $IOS_USERNAME -p $IOS_PASSWORD
tags:
- ios

publish-web-dev:
stage: publish
needs:
- build-web
image: google/cloud-sdk
before_script:
- echo $GCLOUD_GOOGLE_KEY_DEV > key.json
- gcloud auth activate-service-account $GCLOUD_ACCOUNT_DEV --key-file key.json
- gcloud config set account $GCLOUD_ACCOUNT_DEV
- gcloud config set project $GCLOUD_PROJECT_DEV
- gcloud config set compute/zone $GCLOUD_ZONE
- gcloud auth configure-docker
script:
- docker tag $GOOGLE_TAG_DEV $GOOGLE_TAG_LATEST_DEV
- docker push $GOOGLE_TAG_DEV
- docker push $GOOGLE_TAG_LATEST_DEV
only:
- develop
- feat/github-actions
tags:
- docker

publish-web-prod:
stage: publish
needs:
- build-web
image: google/cloud-sdk
before_script:
- echo $GCLOUD_GOOGLE_KEY > key.json
- gcloud auth activate-service-account $GCLOUD_ACCOUNT --key-file key.json
- gcloud config set project $GCLOUD_PROJECT
- gcloud config set account $GCLOUD_ACCOUNT
- gcloud config set compute/zone $GCLOUD_ZONE
- gcloud auth configure-docker
script:
- docker tag $GOOGLE_TAG $GOOGLE_TAG_LATEST
- docker push $GOOGLE_TAG
- docker push $GOOGLE_TAG_LATEST
only:
- master
tags:
- docker

deploy-web-dev:
stage: deploy
needs:
- publish-web-dev
when: manual
image: google/cloud-sdk
before_script:
- echo $GCLOUD_GOOGLE_KEY_DEV > key.json
- gcloud auth activate-service-account $GCLOUD_ACCOUNT_DEV --key-file key.json
- gcloud config set account $GCLOUD_ACCOUNT_DEV
- gcloud config set project $GCLOUD_PROJECT_DEV
- gcloud config set compute/zone $GCLOUD_ZONE
- gcloud container clusters get-credentials papers-cluster-development
script:
- find k8s -type f -name \*.yaml -exec sed -i "s|__NAMESPACE__|"$NAMESPACE"|g" {} +
- find k8s -type f -name \*.yaml -exec sed -i "s|__CI_PROJECT_NAME__|"$CI_PROJECT_NAME"|g" {} +
- find k8s -type f -name \*.yaml -exec sed -i "s|__TO_BE_REPLACED_BY_IMAGE_TAG__|"$GOOGLE_TAG_DEV"|g" {} +
- kubectl apply -f k8s/airgap-wallet/common/namespace.yaml
- kubectl apply -f k8s/airgap-wallet/development/ --recursive
- kubectl apply -f k8s/airgap-wallet/common/ --recursive
only:
- develop
- feat/github-actions
tags:
- docker

deploy-web-prod:
stage: deploy
needs:
- publish-web-prod
when: manual
image: google/cloud-sdk
before_script:
- echo $GCLOUD_GOOGLE_KEY > key.json
- gcloud auth activate-service-account $GCLOUD_ACCOUNT --key-file key.json
- gcloud config set account $GCLOUD_ACCOUNT
- gcloud config set project $GCLOUD_PROJECT
- gcloud config set compute/zone $GCLOUD_ZONE
- gcloud container clusters get-credentials papers-cluster-production
script:
- find k8s -type f -name \*.yaml -exec sed -i "s|__NAMESPACE__|"$NAMESPACE"|g" {} +
- find k8s -type f -name \*.yaml -exec sed -i "s|__CI_PROJECT_NAME__|"$CI_PROJECT_NAME"|g" {} +
- find k8s -type f -name \*.yaml -exec sed -i "s|__TO_BE_REPLACED_BY_IMAGE_TAG__|"$GOOGLE_TAG"|g" {} +
- kubectl apply -f k8s/airgap-wallet/common/namespace.yaml
- kubectl apply -f k8s/airgap-wallet/production/ --recursive
- kubectl apply -f k8s/airgap-wallet/common/ --recursive
only:
- master
tags:
- docker
7 changes: 7 additions & 0 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,13 @@
"devServerTarget": "app:serve:production"
}
}
},
"deploy": {
"builder": "angular-cli-ghpages:deploy",
"options": {
"baseHref": "/airgap-wallet/",
"message": "Deploying latest changes"
}
}
}
},
Expand Down
38 changes: 38 additions & 0 deletions build/web/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
FROM node:14.5.0 as build

# create app directory
RUN mkdir /app
WORKDIR /app

# Install app dependencies, using wildcard if package-lock exists
COPY package.json /app
COPY package-lock.json /app

# install dependencies
RUN npm install

# browserify coin-lib
RUN npm run browserify-coinlib

# Bundle app source
COPY . /app

# set to production
RUN export NODE_ENV=production

# post-install hook, to be safe if it got cached
RUN node config/patch_crypto.js

# build
RUN npx ionic build --prod

###################################

FROM nginx:1-alpine

COPY --from=build /app/www /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

EXPOSE 80

CMD [ "nginx", "-g", "daemon off;" ]
49 changes: 49 additions & 0 deletions k8s/airgap-wallet/common/frontend/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: __CI_PROJECT_NAME__
namespace: __NAMESPACE__
labels:
app: __CI_PROJECT_NAME__
spec:
selector:
matchLabels:
app: __CI_PROJECT_NAME__
replicas: 1
revisionHistoryLimit: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
template:
metadata:
labels:
app: __CI_PROJECT_NAME__
spec:
containers:
- name: __CI_PROJECT_NAME__
image: __TO_BE_REPLACED_BY_IMAGE_TAG__
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: __CI_PROJECT_NAME__-config-map
- secretRef:
name: __CI_PROJECT_NAME__-secret
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 60
timeoutSeconds: 5
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 60
timeoutSeconds: 5
imagePullSecrets:
- name: regsecret
restartPolicy: Always
status: {}
Loading

0 comments on commit cd70071

Please sign in to comment.