diff --git a/.github/workflows/publish-dev.yaml b/.github/workflows/publish-dev.yaml new file mode 100644 index 0000000..dc84eef --- /dev/null +++ b/.github/workflows/publish-dev.yaml @@ -0,0 +1,79 @@ +name: Publish release to development environment + +on: + workflow_dispatch: + push: + branches: + - dev + +jobs: + publish: + runs-on: ubuntu-latest + environment: development + + steps: + - name: Checkout Repo + uses: actions/checkout@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build new image and push + run: | + make \ + build-docker \ + push-image + env: + LATEST_TAG: latest + IMAGE_NAME: eden-proxy-webapp-dev + NEXT_PUBLIC_UAL_APP_NAME: 'edensmartprx' + NEXT_PUBLIC_UAL_API_PROTOCOL: 'https' + NEXT_PUBLIC_UAL_API_HOST: ${{ secrets.DEV_NEXT_PUBLIC_UAL_API_HOST }} + NEXT_PUBLIC_UAL_API_PORT: '443' + NEXT_PUBLIC_UAL_CHAIN_ID: ${{ secrets.DEV_NEXT_PUBLIC_UAL_CHAIN_ID }} + NEXT_PUBLIC_AA_API_HOST: ${{ secrets.DEV_NEXT_PUBLIC_AA_API_HOST }} + NEXT_PUBLIC_GENESISEDEN_CONTRACT: genesis.eden + NEXT_PUBLIC_EDENSMARTPROXY_CONTRACT: edensmartprx + NEXT_PUBLIC_MYVOTEEOSDAO_CONTRACT: myvoteeosdao + NEXT_PUBLIC_PRODUCERS_INFO_API_URL: https://graphql-jungle.antelope.tools/api/rest/get-producers-info + EOSRATE_GET_STATS_URL: ${{ secrets.DEV_EOSRATE_GET_STATS_URL }} + EOSRATE_GET_STATS_USER: ${{ secrets.DEV_EOSRATE_GET_STATS_USER }} + EOSRATE_GET_STATS_PASSWORD: ${{ secrets.DEV_EOSRATE_GET_STATS_PASSWORD }} + + - name: Build voter image and push + run: | + make \ + build-docker-voter \ + push-image-voter + env: + IMAGE_NAME_VOTER: proxy-voter-dev + + - name: Build kubernetes files + id: build_kubernetes_files + run: | + make \ + build-kubernetes + env: + LATEST_TAG: latest + IMAGE_NAME: eden-proxy-webapp-dev + IMAGE_NAME_VOTER: proxy-voter-dev + ENVIRONMENT: dev + EOS_API_ENDPOINT: 'https://jungle.edenia.cloud' + EOS_API_CHAIN_ID: '73e4385a2708e6d7048834fbc1079f2fabb17b3c125b146af438971e90716c4d' + EOS_VOTER_ACCOUNT: 'edensmartprx' + EOS_VOTER_PERMISSION: 'proxyvote' + EOS_VOTER_PRIVATE_KEY: ${{ secrets.DEV_EOS_VOTER_PRIVATE_KEY }} + EOS_PROXY_ACCOUNT: 'edensmartprx' + + - name: Setup and deploy kubernetes environment + uses: steebchen/kubectl@v1.1.0 + env: + KUBE_CONFIG_DATA: ${{ secrets.DEV_KUBE_CONFIG_DATA }} + NAMESPACE: edenproxy + K8S_BUILD_DIR: build_k8s + with: + args: version && make deploy-kubernetes \ No newline at end of file diff --git a/.github/workflows/publish-prod.yaml b/.github/workflows/publish-prod.yaml index efd13e5..824a5e7 100644 --- a/.github/workflows/publish-prod.yaml +++ b/.github/workflows/publish-prod.yaml @@ -28,6 +28,7 @@ jobs: push-image env: LATEST_TAG: latest + IMAGE_NAME: eden-proxy-webapp NEXT_PUBLIC_UAL_APP_NAME: 'edensmartprx' NEXT_PUBLIC_UAL_API_PROTOCOL: 'https' NEXT_PUBLIC_UAL_API_HOST: ${{ secrets.NEXT_PUBLIC_UAL_API_HOST }} @@ -47,6 +48,8 @@ jobs: make \ build-docker-voter \ push-image-voter + env: + IMAGE_NAME_VOTER: proxy-voter - name: Build kubernetes files id: build_kubernetes_files @@ -55,6 +58,9 @@ jobs: build-kubernetes env: LATEST_TAG: latest + IMAGE_NAME: eden-proxy-webapp + IMAGE_NAME_VOTER: proxy-voter + ENVIRONMENT: pdn EOS_API_ENDPOINT: 'https://api.eosn.io' EOS_API_CHAIN_ID: 'aca376f206b8fc25a6ed44dbdc66547c36c6c33e3a119ffbeaef943642f0e906' EOS_VOTER_ACCOUNT: 'edensmartprx' @@ -76,4 +82,4 @@ jobs: uses: marvinpinto/action-automatic-releases@latest with: repo_token: ${{ secrets.GITHUB_TOKEN }} - prerelease: false + prerelease: false \ No newline at end of file diff --git a/k8s/deployment.yml b/k8s-dev/deployment.yml similarity index 100% rename from k8s/deployment.yml rename to k8s-dev/deployment.yml diff --git a/k8s-dev/ingress.yml b/k8s-dev/ingress.yml new file mode 100644 index 0000000..563e9bb --- /dev/null +++ b/k8s-dev/ingress.yml @@ -0,0 +1,31 @@ +apiVersion: traefik.containo.us/v1alpha1 +kind: IngressRoute +metadata: + name: http +spec: + entryPoints: + - web + routes: + - kind: Rule + match: Host(`proxy.edenia.cloud`) + services: + - kind: Service + name: edenproxy + port: 3000 +--- +apiVersion: traefik.containo.us/v1alpha1 +kind: IngressRoute +metadata: + name: https +spec: + entryPoints: + - websecure + routes: + - kind: Rule + match: Host(`proxy.edenia.cloud`) + services: + - kind: Service + name: edenproxy + port: 3000 + tls: + certResolver: myresolver \ No newline at end of file diff --git a/k8s/service.yml b/k8s-dev/service.yml similarity index 100% rename from k8s/service.yml rename to k8s-dev/service.yml diff --git a/k8s/voter.cronjob.yml b/k8s-dev/voter.cronjob.yml similarity index 100% rename from k8s/voter.cronjob.yml rename to k8s-dev/voter.cronjob.yml diff --git a/k8s-pdn/deployment.yml b/k8s-pdn/deployment.yml new file mode 100644 index 0000000..c651af0 --- /dev/null +++ b/k8s-pdn/deployment.yml @@ -0,0 +1,40 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app: edenproxy + name: edenproxy +spec: + replicas: 2 + selector: + matchLabels: + app: edenproxy + template: + metadata: + labels: + app: edenproxy + spec: + imagePullSecrets: + - name: regcred + containers: + - image: ${DOCKER_REGISTRY}/${IMAGE_NAME}:${VERSION} + name: edenproxy + ports: + - containerPort: 80 + name: http + resources: + requests: + cpu: 150m + limits: + cpu: "1" + env: + - name: APP_NAME + value: edenproxy + dnsConfig: + nameservers: + - 10.43.0.10 + searches: + - edenproxy.svc.cluster.local + - svc.cluster.local + - cluster.local + dnsPolicy: None \ No newline at end of file diff --git a/k8s/ingress.yml b/k8s-pdn/ingress.yml similarity index 100% rename from k8s/ingress.yml rename to k8s-pdn/ingress.yml diff --git a/k8s-pdn/service.yml b/k8s-pdn/service.yml new file mode 100644 index 0000000..696b64d --- /dev/null +++ b/k8s-pdn/service.yml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: edenproxy +spec: + selector: + app: edenproxy + ports: + - port: 3000 + targetPort: 3000 + protocol: TCP \ No newline at end of file diff --git a/k8s-pdn/voter.cronjob.yml b/k8s-pdn/voter.cronjob.yml new file mode 100644 index 0000000..538a664 --- /dev/null +++ b/k8s-pdn/voter.cronjob.yml @@ -0,0 +1,32 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: voter-cronjob +spec: + schedule: "0 0 * * *" + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 1 + jobTemplate: + spec: + template: + spec: + containers: + - name: voter + image: ${DOCKER_REGISTRY}/${IMAGE_NAME_VOTER}:${VERSION} + imagePullPolicy: IfNotPresent + command: [ "node" ] + args: [ "/app/src/index.js" ] + env: + - name: EOS_API_ENDPOINT + value: "${EOS_API_ENDPOINT}" + - name: EOS_API_CHAIN_ID + value: "${EOS_API_CHAIN_ID}" + - name: EOS_VOTER_ACCOUNT + value: "${EOS_VOTER_ACCOUNT}" + - name: EOS_VOTER_PERMISSION + value: "${EOS_VOTER_PERMISSION}" + - name: EOS_VOTER_PRIVATE_KEY + value: "${EOS_VOTER_PRIVATE_KEY}" + - name: EOS_PROXY_ACCOUNT + value: "${EOS_PROXY_ACCOUNT}" + restartPolicy: Never \ No newline at end of file diff --git a/makefile b/makefile index 8930311..e8ceb59 100644 --- a/makefile +++ b/makefile @@ -59,7 +59,7 @@ push-image: @docker push $(DOCKER_REGISTRY)/$(IMAGE_NAME):$(LATEST_TAG) build-kubernetes: ##@devops Generate proper k8s files based on the templates -build-kubernetes: ./k8s +build-kubernetes: ./k8s-$(ENVIRONMENT) @echo "Build kubernetes files..." @rm -Rf $(K8S_BUILD_DIR) && mkdir -p $(K8S_BUILD_DIR) @for file in $(K8S_FILES); do \ diff --git a/utils/meta.mk b/utils/meta.mk index 558d2eb..128305e 100644 --- a/utils/meta.mk +++ b/utils/meta.mk @@ -2,12 +2,10 @@ VERSION ?= $(shell git ls-files -s nginx.conf k8s public src package.json yarn.lock Dockerfile | git hash-object --stdin) -IMAGE_NAME=eden-proxy-webapp -IMAGE_NAME_VOTER=proxy-voter IMAGE_ID=$(shell docker images --format '{{.ID}}' --filter reference='docker.pkg.github.com/edenia/eden-smart-proxy*latest') DOCKER_REGISTRY=ghcr.io/edenia -MAKE_ENV += DOCKER_REGISTRY VERSION IMAGE_NAME IMAGE_NAME_VOTER +MAKE_ENV += DOCKER_REGISTRY VERSION SHELL_EXPORT := $(foreach v,$(MAKE_ENV),$(v)='$($(v))') K8S_BUILD_DIR ?= ./build_k8s