diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 5cbdf9004..8ff597d33 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,7 +4,7 @@ on: push: branches: - master - # - 79-fix-implementation-of-overwriting-locales # for testing while developing + - 5059-epic-groups # for testing while developing jobs: ############################################################################## @@ -83,13 +83,13 @@ jobs: ########################################################################## - name: Backend | Build `branded` image run: | - docker build --target branded -t "${DOCKER_ORGANISATION}/backend-branded:latest" -t "${DOCKER_ORGANISATION}/backend-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/backend-branded:${BUILD_VERSION}" -f docker/backend.Dockerfile --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . - docker save "${DOCKER_ORGANISATION}/backend-branded" > /tmp/backend-branded.tar + docker build --target branded -t "${DOCKER_ORGANISATION}/backend-groups-branded:latest" -t "${DOCKER_ORGANISATION}/backend-groups-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/backend-groups-branded:${BUILD_VERSION}" -f docker/backend.Dockerfile --build-arg "APP_IMAGE=ocelotsocialnetwork/backend-groups" --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . + docker save "${DOCKER_ORGANISATION}/backend-groups-branded" > /tmp/backend-groups-branded.tar - name: Upload Artifact uses: actions/upload-artifact@v2 with: name: docker-backend-branded - path: /tmp/backend-branded.tar + path: /tmp/backend-groups-branded.tar ############################################################################## # JOB: DOCKER BUILD BRANDED WEBAPP ########################################### @@ -125,13 +125,13 @@ jobs: ########################################################################## - name: Webapp | Build `branded` image run: | - docker build --target branded -t "${DOCKER_ORGANISATION}/webapp-branded:latest" -t "${DOCKER_ORGANISATION}/webapp-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/webapp-branded:${BUILD_VERSION}" -f docker/webapp.Dockerfile --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . - docker save "${DOCKER_ORGANISATION}/webapp-branded" > /tmp/webapp-branded.tar + docker build --target branded -t "${DOCKER_ORGANISATION}/webapp-groups-branded:latest" -t "${DOCKER_ORGANISATION}/webapp-groups-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/webapp-groups-branded:${BUILD_VERSION}" -f docker/webapp.Dockerfile --build-arg "APP_IMAGE=ocelotsocialnetwork/webapp-groups" --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . + docker save "${DOCKER_ORGANISATION}/webapp-groups-branded" > /tmp/webapp-groups-branded.tar - name: Upload Artifact uses: actions/upload-artifact@v2 with: name: docker-webapp-branded - path: /tmp/webapp-branded.tar + path: /tmp/webapp-groups-branded.tar ############################################################################## # JOB: DOCKER BUILD BRANDED MAINTENANCE ###################################### @@ -167,13 +167,13 @@ jobs: ########################################################################## - name: Maintenance | Build `branded` image run: | - docker build --target branded -t "${DOCKER_ORGANISATION}/maintenance-branded:latest" -t "${DOCKER_ORGANISATION}/maintenance-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/maintenance-branded:${BUILD_VERSION}" -f docker/maintenance.Dockerfile --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . - docker save "${DOCKER_ORGANISATION}/maintenance-branded" > /tmp/maintenance-branded.tar + docker build --target branded -t "${DOCKER_ORGANISATION}/maintenance-groups-branded:latest" -t "${DOCKER_ORGANISATION}/maintenance-groups-branded:${VERSION}" -t "${DOCKER_ORGANISATION}/maintenance-groups-branded:${BUILD_VERSION}" -f docker/maintenance.Dockerfile --build-arg "APP_IMAGE=ocelotsocialnetwork/maintenance-groups" --build-arg "APP_IMAGE_TAG_CODE=${OCELOT_DOCKER_VERSION_TAG}-code" --build-arg "APP_IMAGE_TAG_BASE=${OCELOT_DOCKER_VERSION_TAG}-base" . + docker save "${DOCKER_ORGANISATION}/maintenance-groups-branded" > /tmp/maintenance-groups-branded.tar - name: Upload Artifact uses: actions/upload-artifact@v2 with: name: docker-maintenance-branded - path: /tmp/maintenance-branded.tar + path: /tmp/maintenance-groups-branded.tar ############################################################################## # JOB: UPLOAD TO DOCKERHUB ################################################### @@ -225,7 +225,7 @@ jobs: name: docker-backend-branded path: /tmp - name: Load Docker Image - run: docker load < /tmp/backend-branded.tar + run: docker load < /tmp/backend-groups-branded.tar # Webapp - name: Download Docker Image (Webapp) uses: actions/download-artifact@v2 @@ -233,7 +233,7 @@ jobs: name: docker-webapp-branded path: /tmp - name: Load Docker Image - run: docker load < /tmp/webapp-branded.tar + run: docker load < /tmp/webapp-groups-branded.tar # Maintenance - name: Download Docker Image (Maintenance) uses: actions/download-artifact@v2 @@ -241,7 +241,7 @@ jobs: name: docker-maintenance-branded path: /tmp - name: Load Docker Image - run: docker load < /tmp/maintenance-branded.tar + run: docker load < /tmp/maintenance-groups-branded.tar ########################################################################## # Upload ################################################################# ########################################################################## @@ -250,11 +250,90 @@ jobs: - name: Push Neo4j Community run: docker push --all-tags ${DOCKER_ORGANISATION}/neo4j-community-branded - name: Push Backend - run: docker push --all-tags ${DOCKER_ORGANISATION}/backend-branded + run: docker push --all-tags ${DOCKER_ORGANISATION}/backend-groups-branded - name: Push Webapp - run: docker push --all-tags ${DOCKER_ORGANISATION}/webapp-branded + run: docker push --all-tags ${DOCKER_ORGANISATION}/webapp-groups-branded - name: Push Maintenance - run: docker push --all-tags ${DOCKER_ORGANISATION}/maintenance-branded + run: docker push --all-tags ${DOCKER_ORGANISATION}/maintenance-groups-branded + + ############################################################################## + # JOB: KUBERNETES DEPLOY ACTUAL/LATEST VERSION ###################################### + ############################################################################## + kubernetes_deploy: + # see example https://github.com/do-community/example-doctl-action + # see example https://github.com/do-community/example-doctl-action/blob/main/.github/workflows/workflow.yaml + name: Kubernetes deploy of latest version to stage.ocelot.social cluster at DigitalOcean + runs-on: ubuntu-latest + needs: [upload_to_dockerhub] + steps: + ########################################################################## + # CHECKOUT CODE ########################################################## + ########################################################################## + - name: Checkout code + uses: actions/checkout@v2 + ########################################################################## + # SET ENVS ############################################################### + ########################################################################## + - name: ENV - VERSION + run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV + - name: ENV - BUILD_DATE + run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + - name: ENV - OCELOT_DOCKER_VERSION_TAG + run: echo "OCELOT_DOCKER_VERSION_TAG=$(node -p -e "require('./package.json').ocelotDockerVersionTag")" >> $GITHUB_ENV + - name: ENV - DOCKER_ORGANISATION + run: echo "DOCKER_ORGANISATION=$(node -p -e "require('./package.json').dockerOrganisation")" >> $GITHUB_ENV + # this is based on the node Docker version tag "node:12.19.0-alpine3.10" and looks like "app-branded:1.0.2-3-ocelot.social1.0.2-79" + - name: ENV - BUILD_VERSION + run: echo "BUILD_VERSION=${VERSION}-${GITHUB_RUN_NUMBER}-ocelot.social${OCELOT_DOCKER_VERSION_TAG}" >> $GITHUB_ENV + ########################################################################## + # Install DigitalOceans doctl and set kubeconfig ######################### + ########################################################################## + - name: Install doctl + uses: digitalocean/action-doctl@v2 + with: + token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }} + - name: Save DigitalOcean kubeconfig with short-lived credentials + run: doctl kubernetes cluster kubeconfig save --expiry-seconds 600 cluster-stage-yunite-me + ########################################################################## + # Deploy new Docker images to DigitalOcean Kubernetes cluster ############ + ########################################################################## + # - name: Deploy 'latest' to DigitalOcean Kubernetes + # run: | + # kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=ocelotsocialnetwork/webapp:latest + # kubectl -n default rollout restart deployment/ocelot-webapp + # kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=ocelotsocialnetwork/backend:latest + # kubectl -n default rollout restart deployment/ocelot-backend + # kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=ocelotsocialnetwork/maintenance:latest + # kubectl -n default rollout restart deployment/ocelot-maintenance + # kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=ocelotsocialnetwork/neo4j-community:latest + # kubectl -n default rollout restart deployment/ocelot-neo4j + - name: Deploy actual version '$BUILD_VERSION' to DigitalOcean Kubernetes + run: | + kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=${DOCKER_ORGANISATION}/webapp-groups-branded:${BUILD_VERSION} + kubectl -n default rollout restart deployment/ocelot-webapp + kubectl -n default set image deployment/ocelot-backend container-ocelot-backend=${DOCKER_ORGANISATION}/backend-groups-branded:${BUILD_VERSION} + kubectl -n default rollout restart deployment/ocelot-backend + kubectl -n default set image deployment/ocelot-maintenance container-ocelot-maintenance=${DOCKER_ORGANISATION}/maintenance-groups-branded:${BUILD_VERSION} + kubectl -n default rollout restart deployment/ocelot-maintenance + kubectl -n default set image deployment/ocelot-neo4j container-ocelot-neo4j=${DOCKER_ORGANISATION}/neo4j-community-branded:${BUILD_VERSION} + kubectl -n default rollout restart deployment/ocelot-neo4j + # because this step 'kubectl -n default rollout status deployment/* --timeout=600s' does not work as expected + # and we need the pods to be up again for cleaning and seeding the Neo4j database and the backend. + # !!! this is not a perfect solution !!! + # deployments are regularely up again after 3 minutes and 10 seconds + - name: Sleep for 4 minutes, means 240 seconds + run: sleep 240s + shell: bash + - name: Verify deployment and wait for the pods of each deplyment to get ready for cleaning and seeding of the database + run: | + kubectl -n default rollout status deployment/ocelot-backend --timeout=600s + kubectl -n default rollout status deployment/ocelot-neo4j --timeout=600s + kubectl -n default rollout status deployment/ocelot-maintenance --timeout=600s + kubectl -n default rollout status deployment/ocelot-webapp --timeout=600s + - name: Reset and seed Neo4j database via backend for staging + # db cleaning and seeding is only possible in production if env 'PRODUCTION_DB_CLEAN_ALLOW=true' is set in deployment + run: | + kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "node --experimental-repl-await dist/db/clean.js && node --experimental-repl-await dist/db/seed.js" ############################################################################## # JOB: GITHUB TAG LATEST VERSION ############################################# diff --git a/TODO-next-update.md b/TODO-next-update.md index 4cf3c8d10..844dde5a1 100644 --- a/TODO-next-update.md +++ b/TODO-next-update.md @@ -2,11 +2,17 @@ When you overtake this deploy and rebrand repo to your network you have to recognize the following changes and doings … +## This Latest Version >= 1.1.1 with 'ocelotDockerVersionTag' 1.1.1-231 + +### Yunite Deployment/Rebranding PR – chore: 🍰 Release v1.1.1-231 - New Group Features #14 + +- You have to add the file `webapp/constants/groups.js` as `branding/constants/groups.js` which should include `SHOW_GROUP_BUTTON_IN_HEADER` set to your needs. + ## This Latest Version >= 1.1.0 with 'ocelotDockerVersionTag' 1.1.0-205 ### Deployment/Rebranding PR – chore: 🍰 Release v1.1.0 - Implement Categories Again #63 -- You have to add the `CATEGORIES_ACTIVE` from the `deployment/kubernetes/values.template.yaml` to your `deployment/kubernetes/values.yaml` and set it to your prevered value. +- You have to add the `CATEGORIES_ACTIVE` from the `deployment/kubernetes/values.template.yaml` to your `deployment/kubernetes/values.yaml` and set it to your preferred value. - Make sure the correct categories are in your Neo4j database on the server. ## Version >= 1.0.9 with 'ocelotDockerVersionTag' 1.0.9-199 diff --git a/branding/constants/groups.js b/branding/constants/groups.js new file mode 100644 index 000000000..3b00b2433 --- /dev/null +++ b/branding/constants/groups.js @@ -0,0 +1,5 @@ +// this file is duplicated in `backend/src/constants/group.js` and `webapp/constants/group.js` +export const GROUPNAME_MIN_LENGTH = 3 +export const GROUPNAME_MAX_LENGTH = 50 +export const GROUPDESCRIPTION_WITHOUT_HTML_LENGTH_MIN = 100 // with removed HTML tags +export const SHOW_GROUP_BUTTON_IN_HEADER = false diff --git a/branding/constants/headerMenu.js b/branding/constants/headerMenu.js index 8f0293485..37c46e202 100644 --- a/branding/constants/headerMenu.js +++ b/branding/constants/headerMenu.js @@ -4,6 +4,10 @@ export default { nameIdent: 'ocelotRebranding.newsFeed', path: '/', }, + { + nameIdent: 'ocelotRebranding.myGroups', + path: '/my-groups', + }, { nameIdent: 'ocelotRebranding.about', url: 'https://yunite.org', diff --git a/package.json b/package.json index dfce46c3c..1dd33f47e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "yunite.net", "version": "1.1.1", - "ocelotDockerVersionTag": "1.1.1-228", + "ocelotDockerVersionTag": "1.1.1-231", "dockerOrganisation": "tirokk", "description": "yunite.net Branded", "author": "yunite.net Community",