Skip to content

Commit b59bb87

Browse files
author
billy clark
committed
Merge branch 'develop'
2 parents 30b58e4 + 6bae354 commit b59bb87

Some content is hidden

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

55 files changed

+4639
-83
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
name: Publish LFNext images to Docker Hub on-demand
2+
3+
# https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#on
4+
on:
5+
workflow_dispatch:
6+
7+
jobs:
8+
build-n-publish:
9+
runs-on: ubuntu-latest
10+
11+
env:
12+
# https://docs.docker.com/develop/develop-images/build_enhancements/
13+
DOCKER_BUILDKIT: 1
14+
15+
defaults:
16+
run:
17+
working-directory: docker
18+
19+
steps:
20+
-
21+
uses: actions/checkout@v2
22+
-
23+
run: make build-next
24+
-
25+
id: image
26+
run: |
27+
echo ::set-output name=NAMESPACE::sillsdev/web-languageforge
28+
echo ::set-output name=BUILD_ID::$(date +%Y%m%d)-${{ github.sha }}
29+
-
30+
run: |
31+
docker tag lf-next-app ${{ steps.image.outputs.NAMESPACE }}:next-app-${{ steps.image.outputs.BUILD_ID }}
32+
docker tag lf-next-proxy ${{ steps.image.outputs.NAMESPACE }}:next-proxy-${{ steps.image.outputs.BUILD_ID }}
33+
-
34+
run: docker images
35+
-
36+
uses: docker/login-action@v1
37+
with:
38+
username: ${{ secrets.DOCKERHUB_USERNAME }}
39+
password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
40+
-
41+
run: docker push --all-tags ${{ steps.image.outputs.NAMESPACE }}

.github/workflows/integrate-and-deploy.yml

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,16 @@ on:
55
workflow_call:
66
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#onworkflow_callinputs
77
inputs:
8-
image-tag:
8+
image-tag-app:
99
type: string
1010
required: true
11+
image-tag-proxy:
12+
type: string
13+
required: true
14+
image-tag-next-app:
15+
type: string
16+
required: true
17+
1118
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onworkflow_callsecrets
1219
secrets:
1320
kube-context:
@@ -41,7 +48,9 @@ jobs:
4148
id: image
4249
run: |
4350
echo ::set-output name=NAMESPACE::sillsdev/web-languageforge
44-
echo ::set-output name=TAG::${{ inputs.image-tag }}
51+
echo ::set-output name=TAG_APP::${{ inputs.image-tag-app }}
52+
echo ::set-output name=TAG_PROXY::${{ inputs.image-tag-proxy }}
53+
echo ::set-output name=TAG_NEXT_APP::${{ inputs.image-tag-next-app }}
4554
-
4655
uses: actions/setup-node@v2
4756
with:
@@ -50,15 +59,18 @@ jobs:
5059
-
5160
run: npm ci
5261
-
53-
name: Build app
54-
run: docker-compose build --build-arg ENVIRONMENT=production --build-arg BUILD_VERSION=${{ steps.image.outputs.TAG }} app
62+
name: Build legacy app
63+
run: |
64+
docker-compose build --build-arg ENVIRONMENT=production --build-arg BUILD_VERSION=${{ steps.image.outputs.TAG }} app
65+
docker-compose run --rm app cat /var/www/html/build-version.txt /var/www/html/version.php
5566
-
56-
run: docker-compose run --rm app cat /var/www/html/build-version.txt /var/www/html/version.php
67+
name: Build "next" images
68+
run: make build-next
5769
-
5870
name: Unit Tests
5971
run: make unit-tests-ci
6072
-
61-
name: Playwright E2E Tests
73+
name: E2E Tests
6274
working-directory: .
6375
run: |
6476
docker-compose -f docker/docker-compose.yml up -d app-for-playwright
@@ -71,14 +83,21 @@ jobs:
7183
username: ${{ secrets.image-repo-username }}
7284
password: ${{ secrets.image-repo-password }}
7385
-
74-
name: Tag image
75-
run: docker tag lf-app ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG }}
86+
name: Tag images
87+
run: |
88+
docker tag lf-app ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_APP }}
89+
docker tag lf-next-proxy ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_PROXY }}
90+
docker tag lf-next-app ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_NEXT_APP }}
91+
-
92+
run: docker images
7693
-
77-
name: Publish image
78-
run: docker push ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG }}
94+
name: Publish images
95+
run: docker push --all-tags ${{ steps.image.outputs.NAMESPACE }}
7996

8097
outputs:
81-
IMAGE: ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG }}
98+
IMAGE_APP: ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_APP }}
99+
IMAGE_PROXY: ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_PROXY }}
100+
IMAGE_NEXT_APP: ${{ steps.image.outputs.NAMESPACE }}:${{ steps.image.outputs.TAG_NEXT_APP }}
82101

83102
deploy:
84103
runs-on: [self-hosted, languageforge]
@@ -89,4 +108,7 @@ jobs:
89108
-
90109
uses: sillsdev/common-github-actions/install-kubectl@v1
91110
-
92-
run: kubectl --context ${{ secrets.kube-context }} set image deployment/app app=${{ needs.integrate.outputs.IMAGE }}
111+
run: |
112+
kubectl --context ${{ secrets.kube-context }} set image deployment/app app=${{ needs.integrate.outputs.IMAGE_APP }}
113+
kubectl --context ${{ secrets.kube-context }} set image deployment/next-proxy next-proxy=${{ needs.integrate.outputs.IMAGE_PROXY }}
114+
kubectl --context ${{ secrets.kube-context }} set image deployment/next-app next-app=${{ needs.integrate.outputs.IMAGE_NEXT_APP }}

.github/workflows/production.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ jobs:
1313
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_iduses
1414
uses: sillsdev/web-languageforge/.github/workflows/integrate-and-deploy.yml@master
1515
with:
16-
image-tag: $(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')
16+
image-tag-app: $(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')
17+
image-tag-proxy: next-proxy-$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')
18+
image-tag-next-app: next-app-$(echo ${{ github.ref }} | sed 's/refs\/tags\/v//')
19+
1720
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecrets
1821
secrets:
1922
kube-context: ${{ secrets.LTOPS_K8S_PRODUCTION_CONTEXT }}

.github/workflows/staging.yml

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ on:
88

99
jobs:
1010
staging:
11-
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_iduses
12-
uses: sillsdev/web-languageforge/.github/workflows/integrate-and-deploy.yml@develop
13-
with:
14-
image-tag: develop-$(date +%Y%m%d)-${{ github.sha }}
15-
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecrets
16-
secrets:
17-
kube-context: ${{ secrets.LTOPS_K8S_STAGING_CONTEXT }}
18-
image-repo-username: ${{ secrets.DOCKERHUB_USERNAME }}
19-
image-repo-password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}
11+
# https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#jobsjob_iduses
12+
uses: sillsdev/web-languageforge/.github/workflows/integrate-and-deploy.yml@develop
13+
with:
14+
image-tag-app: develop-$(date +%Y%m%d)-${{ github.sha }}
15+
image-tag-proxy: develop-next-proxy-$(date +%Y%m%d)-${{ github.sha }}
16+
image-tag-next-app: develop-next-app-$(date +%Y%m%d)-${{ github.sha }}
17+
18+
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idsecrets
19+
secrets:
20+
kube-context: ${{ secrets.LTOPS_K8S_STAGING_CONTEXT }}
21+
image-repo-username: ${{ secrets.DOCKERHUB_USERNAME }}
22+
image-repo-password: ${{ secrets.DOCKERHUB_ACCESS_TOKEN }}

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ PhpUnitTests.xml
22
docker/e2e-results.xml
33
src/assets/*
44
src/dist/*
5+
src/vendor/*
56
!src/assets/.gitkeep
67
src/cache/*
78
!src/cache/.gitkeep

.vscode/extensions.json

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
// See http://go.microsoft.com/fwlink/?LinkId=827846
33
// for the documentation about the extensions.json format
44
"recommendations": [
5-
"juancasanova.awesometypescriptproblemmatcher",
6-
"msjsdiag.debugger-for-chrome",
7-
"ms-vscode-remote.remote-containers",
8-
"editorconfig.editorconfig",
9-
"dbaeumer.vscode-eslint",
10-
"xdebug.php-pack"
11-
]
5+
"juancasanova.awesometypescriptproblemmatcher",
6+
"msjsdiag.debugger-for-chrome",
7+
"ms-vscode-remote.remote-containers",
8+
"editorconfig.editorconfig",
9+
"dbaeumer.vscode-eslint",
10+
"xdebug.php-pack",
11+
"svelte.svelte-vscode",
12+
"bradlc.vscode-tailwindcss"
13+
]
1214
}

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ If you don't have a GitHub account or don't want your issue to be public, you ca
1919

2020
## Contributing ##
2121

22-
We're glad you're here! Read our [Contributing Guide](CONTRIBUTING.md) for how you can help this project. You don't have to be a software developer to help make Language Forge better.
22+
We're glad you're here! Read our [Contributing Guide](CONTRIBUTING.md) for how you can help this project. You don't have to be a software developer to help make Language Forge better.
23+
2324
## Developers ##
2425

2526
Please see our [Developer Guide](docs/DEVELOPER.md) for developer best practices and environment setup

docker/Makefile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ e2e-tests-ci:
3737

3838
.PHONY: unit-tests
3939
unit-tests:
40+
docker-compose build test-php
4041
docker-compose run test-php
4142

4243
.PHONY: unit-tests-ci
@@ -48,7 +49,7 @@ unit-tests-ci:
4849
.PHONY: build
4950
build:
5051
npm install
51-
docker-compose build mail app ld-api
52+
docker-compose build mail app ld-api next-proxy next-app
5253

5354
.PHONY: scan
5455
# https://docs.docker.com/engine/scan
@@ -57,6 +58,14 @@ scan:
5758
docker login
5859
-docker scan --accept-license lf-app:prod > docker-scan-results.txt
5960

61+
.PHONY: next-dev
62+
next-dev: build
63+
docker compose up -d next-proxy-dev
64+
65+
.PHONY: build-next
66+
build-next:
67+
docker compose build next-proxy next-app
68+
6069
.PHONY: clean
6170
clean:
6271
docker-compose down

docker/deployment/Makefile

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,51 @@
11
# https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands
2-
list-services:
3-
kubectl get services
4-
52
list-deployments:
63
kubectl get deployments
4+
list-services:
5+
kubectl get services
6+
list-pods:
7+
kubectl get pods
8+
list-contexts:
9+
kubectl config get-contexts
10+
list-config:
11+
cat ~/.kube/config
712

8-
logs: logs-app logs-db logs-mail
13+
logs: logs-app logs-db logs-mail logs-next-app logs-next-proxy
914
logs-app:
1015
kubectl logs deploy/app
16+
logs-next-app:
17+
kubectl logs deploy/next-app
18+
logs-next-proxy:
19+
kubectl logs deploy/next-proxy
1120
logs-db:
1221
kubectl logs deploy/db
1322
logs-mail:
1423
kubectl logs deploy/mail
1524

16-
retrieve-current-deployments:
17-
kubectl get deploy app -o yaml > app-deployment-current.yaml
18-
kubectl get deploy mail -o yaml > mail-deployment-current.yaml
19-
kubectl get deploy db -o yaml > db-deployment-current.yaml
20-
2125
shell-app:
2226
kubectl exec -it deploy/app -- sh
27+
shell-next-app:
28+
kubectl exec -it deploy/next-app -- sh
29+
shell-next-proxy:
30+
kubectl exec -it deploy/next-proxy -- sh
2331

2432
init-secrets:
2533
kubectl apply -f secrets.yaml
2634

2735
create-new-deployment-mail:
2836
kubectl create deployment mail --image=juanluisbaptiste/postfix:1.0.0 --dry-run=client -o yaml > mail-deployment-new.yaml
2937

30-
deploy-staging: deploy-db deploy-mail-staging deploy-app-staging
38+
deploy-staging: deploy-db deploy-mail-staging deploy-app-staging deploy-next-proxy-staging deploy-next-app-staging
3139
deploy-mail-staging:
3240
sed -e s/{{SERVER_HOSTNAME}}/qa.languageforge.org/ mail-deployment.yaml | kubectl apply -f -
3341
deploy-app-staging:
3442
sed -e s/{{WEBSITE}}/qa.languageforge.org/ app-deployment.yaml \
35-
| sed -e s/{{VERSION}}/$(VERSION)/ | kubectl apply -f -
43+
| sed -e s/{{VERSION}}/$(VERSION_APP)/ | kubectl apply -f -
44+
deploy-next-proxy-staging:
45+
sed -e s/{{WEBSITE}}/qa.languageforge.org/ next-proxy-deployment.yaml \
46+
| sed -e s/{{VERSION}}/$(VERSION_PROXY)/ | kubectl apply -f -
47+
deploy-next-app-staging:
48+
sed -e s/{{VERSION}}/$(VERSION_NEXT_APP)/ next-app-deployment.yaml | kubectl apply -f -
3649
deploy-prod: deploy-db deploy-mail-prod deploy-app-prod
3750
deploy-mail-prod:
3851
sed -e s/{{SERVER_HOSTNAME}}/languageforge.org/ mail-deployment.yaml | kubectl apply -f -
@@ -42,7 +55,7 @@ deploy-app-prod:
4255
deploy-db:
4356
kubectl apply -f db-deployment.yaml
4457

45-
delete: delete-app delete-mail delete-db
58+
delete: delete-app delete-mail delete-db delete-next-proxy delete-next-app
4659
delete-db: # does NOT delete the volume, i.e., the data in the database
4760
kubectl delete deployment,service db
4861
delete-db-data:
@@ -51,11 +64,15 @@ delete-mail:
5164
kubectl delete deployment,service mail
5265
delete-app: # does NOT delete the volumes, e.g., the project assets like pictures and audio files
5366
kubectl delete deployment,service app
54-
kubectl delete ingress languageforge-app
5567
delete-app-assets:
5668
kubectl delete pvc lf-project-assets
5769
delete-app-sendreceive-data:
5870
kubectl delete pvc lfmerge-sendreceive-data
71+
delete-next-proxy:
72+
kubectl delete deployment,service next-proxy
73+
kubectl delete ingress languageforge-app
74+
delete-next-app:
75+
kubectl delete deployment,service next-app
5976

6077
APPPOD = $(shell kubectl get pods --selector='app=app' -o name | sed -e s'/pod\///')
6178
lfmerge-copy-state:

docker/deployment/app-deployment.yaml

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata:
77
name: app
88
spec:
99
type: ClusterIP
10+
clusterIP: None
1011
ports:
1112
- name: http
1213
protocol: TCP
@@ -17,34 +18,6 @@ spec:
1718

1819
---
1920

20-
# https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource
21-
apiVersion: networking.k8s.io/v1
22-
kind: Ingress
23-
metadata:
24-
name: languageforge-app
25-
annotations:
26-
# https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#custom-max-body-size
27-
# Added this to allow large file uploads, this setting should match the php custom config, i.e., upload_max_filesize, found in the app's customizations.php.ini
28-
nginx.ingress.kubernetes.io/proxy-body-size: 60M
29-
spec:
30-
rules:
31-
- host: {{WEBSITE}}
32-
http:
33-
paths:
34-
- path: /
35-
pathType: ImplementationSpecific
36-
backend:
37-
service:
38-
name: app
39-
port:
40-
number: 80
41-
tls:
42-
- hosts:
43-
- {{WEBSITE}}
44-
secretName: languageforge-tls
45-
46-
---
47-
4821
# https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims
4922
apiVersion: v1
5023
kind: PersistentVolumeClaim

0 commit comments

Comments
 (0)