Merge pull request #94 from Yunite-Net/v2.3.0

V2.3.0
This commit is contained in:
Ulf Gebhardt 2022-12-07 00:14:52 +01:00 committed by GitHub
commit 18b2d0fca0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 261 additions and 216 deletions

View File

@ -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,7 +83,7 @@ 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 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=ocelotsocialnetwork/backend" --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
- name: Upload Artifact
uses: actions/upload-artifact@v2
@ -125,7 +125,7 @@ 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 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=ocelotsocialnetwork/webapp" --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
- name: Upload Artifact
uses: actions/upload-artifact@v2
@ -167,7 +167,7 @@ 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 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=ocelotsocialnetwork/maintenance" --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
- name: Upload Artifact
uses: actions/upload-artifact@v2
@ -256,6 +256,78 @@ jobs:
- name: Push Maintenance
run: docker push --all-tags ${DOCKER_ORGANISATION}/maintenance-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 actual version '$BUILD_VERSION' to DigitalOcean Kubernetes
run: |
kubectl -n default set image deployment/ocelot-webapp container-ocelot-webapp=${DOCKER_ORGANISATION}/webapp-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-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-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 regularly 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 deployment 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: Run migrations for Neo4j database via backend for staging
run: |
kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- /bin/sh -c "yarn prod:migrate up"
- 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 #############################################
##############################################################################

View File

@ -21,6 +21,7 @@ __Try out our deployed [development environment](https://stage.ocelot.social).__
Visit our staging networks:
- central staging network: [stage.ocelot.social](https://stage.ocelot.social)
- Yunite staging network: [stage.yunite.me](https://stage.yunite.me)
<!-- - rebranded staging network: [rebrand.ocelot.social](https://stage.ocelot.social). -->
Logins:

Binary file not shown.

View File

@ -2,4 +2,69 @@
*
* Here, all SCSS variables and classes can be adapted to your custom design.
*
*/
*/
@font-face {
font-family: Overpass;
src: url('~@/assets/fonts/Overpass-VariableFont_wght.ttf');
}
$color-primary: #6e8b87;
$color-primary-yunite: #a6ff00;
$color-primary-light: #fff;
$color-primary-active: hsla(0,0%,100%,.8);
$font-family-heading: 'Overpass',Helvetica,Arial,Lucida,sans-serif;
$font-family-text: 'Overpass',Helvetica,Arial,Lucida,sans-serif;
$color-header-background: $color-primary;
$color-footer-background: $color-primary-yunite;
$color-locale-menu: $color-primary-yunite;
.main-navigation a {
color: $color-primary-light;
text-transform: uppercase;
font-size: 16px;
font-weight: 500;
}
.main-navigation a:hover {
color: $color-primary-active;
}
.main-navigation .router-link-exact-active {
color: #A6FF00!important;
}
.main-navigation .locale-menu {
color: $color-primary-light;
}
.main-navigation .base-button {
color: $color-primary-light;
}
#nav-search-box .hc-hashtag a{
color: #17b53f;
}
#footer {
background-color: $color-primary-yunite;
}
#footer a {
color: $color-primary;
}
.branding-menu .ds-text {
font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif;
font-weight: 500;
text-transform: uppercase;
font-size: 16px;
}
.ds-footer {
font-family: 'Overpass',Helvetica,Arial,Lucida,sans-serif;
text-transform: uppercase;
font-size: 16px;
font-weight: 500;
}

View File

@ -1 +1 @@
export const PROGRESS_BAR_COLOR_TYPE = 'gradient' // 'uni' is the other option
export const PROGRESS_BAR_COLOR_TYPE = 'uni' // 'gradient' is the other option

View File

@ -1,8 +1,8 @@
// this file is duplicated in `backend/src/config/` and `webapp/constants/` and replaced on rebranding by https://github.com/Ocelot-Social-Community/Ocelot-Social-Deploy-Rebranding/tree/master/branding/constants/
export default {
SUPPORT_EMAIL: 'hello@ocelot.social',
MODERATION_EMAIL: 'hello@ocelot.social',
SUPPORT_EMAIL: 'support@yunite.org',
MODERATION_EMAIL: 'hello@yunite.org',
// ATTENTION: the following links have to be defined even for internal pages with full URLs as example like 'https://staging.ocelot.social/support', because they are used in e-mails!
ORGANIZATION_LINK: 'https://ocelot.social',
SUPPORT_LINK: 'https://ocelot.social',
ORGANIZATION_LINK: 'https://yunite.org',
SUPPORT_LINK: 'https://yunite.org',
}

View File

@ -2,4 +2,4 @@
export const NAME_LENGTH_MIN = 3
export const NAME_LENGTH_MAX = 50
export const DESCRIPTION_WITHOUT_HTML_LENGTH_MIN = 100 // with removed HTML tags
export const SHOW_GROUP_BUTTON_IN_HEADER = true
export const SHOW_GROUP_BUTTON_IN_HEADER = false

View File

@ -1,13 +1,22 @@
export default {
MENU: [
// {
// nameIdent: 'nameIdent',
// path: '/',
// },
// {
// nameIdent: 'nameIdent',
// url: 'https://ocelot.social',
// target: '_blank',
// },
{
nameIdent: 'yuniteRebranding.header.newsFeed',
path: '/',
},
{
nameIdent: 'yuniteRebranding.header.groups',
path: '/groups',
},
{
nameIdent: 'yuniteRebranding.header.topics',
url: 'https://yunite.org/themen/',
target: '',
},
{
nameIdent: 'yuniteRebranding.header.about',
url: 'https://yunite.org',
target: '',
},
],
}

View File

@ -5,8 +5,8 @@ import { defaultPageParamsPages } from '~/components/utils/InternalPages.js'
const ORGANIZATION = defaultPageParamsPages.ORGANIZATION.overwrite({
// if defined it's dominating
externalLink: {
url: 'https://ocelot.social',
target: '_blank',
url: 'https://yunite.org',
target: '',
},
internalPage: {
@ -16,15 +16,14 @@ const ORGANIZATION = defaultPageParamsPages.ORGANIZATION.overwrite({
hasContainer: true,
hasBaseCard: true,
hasLoginInHeader: true,
// in case internal page content is here 'branding/locales/html/'
// in case internal page content is here 'webapp/locales/html/'
},
})
const DONATE = defaultPageParamsPages.DONATE.overwrite({
// if defined it's dominating
externalLink: {
// we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
url: 'https://ocelot-social.herokuapp.com/donations',
target: '_blank',
url: 'https://yunite.org/spenden/',
target: '',
},
internalPage: {
@ -40,13 +39,12 @@ const DONATE = defaultPageParamsPages.DONATE.overwrite({
const IMPRINT = defaultPageParamsPages.IMPRINT.overwrite({
// if defined it's dominating
externalLink: {
// we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
url: 'https://ocelot-social.herokuapp.com/imprint',
target: '_blank',
url: 'https://yunite.org/impressum/',
target: '',
},
internalPage: {
// footerIdent: 'site.imprint', // localized string identifier, if undefined default is used
footerIdent: 'yuniteRebranding.footer.imprint', // localized string identifier, if undefined default is used
// headTitleIdent: 'site.imprint', // localized string identifier, if undefined default is used
// headlineIdent: 'site.imprint', // localized string identifier, on null it's hidden, if undefined default is used
hasContainer: true,
@ -69,7 +67,11 @@ const TERMS_AND_CONDITIONS = defaultPageParamsPages.TERMS_AND_CONDITIONS.overwri
},
})
const CODE_OF_CONDUCT = defaultPageParamsPages.CODE_OF_CONDUCT.overwrite({
// externalLink: null, // if defined it's dominating
// if defined it's dominating
externalLink: {
url: 'https://yunite.org/ueber-yunite/unsere-werte/',
target: '',
},
internalPage: {
// footerIdent: 'site.code-of-conduct', // localized string identifier, if undefined default is used
@ -82,10 +84,14 @@ const CODE_OF_CONDUCT = defaultPageParamsPages.CODE_OF_CONDUCT.overwrite({
},
})
const DATA_PRIVACY = defaultPageParamsPages.DATA_PRIVACY.overwrite({
// externalLink: null, // if defined it's dominating
// if defined it's dominating
externalLink: {
url: 'https://yunite.org/datenschutz/',
target: '',
},
internalPage: {
// footerIdent: 'site.data-privacy', // localized string identifier, if undefined default is used
footerIdent: 'yuniteRebranding.footer.dataPrivacy', // localized string identifier, if undefined default is used
// headTitleIdent: 'site.data-privacy', // localized string identifier, if undefined default is used
// headlineIdent: 'site.data-privacy', // localized string identifier, on null it's hidden, if undefined default is used
hasContainer: true,
@ -95,7 +101,11 @@ const DATA_PRIVACY = defaultPageParamsPages.DATA_PRIVACY.overwrite({
},
})
const FAQ = defaultPageParamsPages.FAQ.overwrite({
// externalLink: null, // if defined it's dominating
// if defined it's dominating
externalLink: {
url: 'https://yunite.org/ueber-yunite/faq-hilfe/',
target: '',
},
internalPage: {
// footerIdent: 'site.faq', // localized string identifier, if undefined default is used
@ -110,8 +120,8 @@ const FAQ = defaultPageParamsPages.FAQ.overwrite({
const SUPPORT = defaultPageParamsPages.SUPPORT.overwrite({
// if defined it's dominating
externalLink: {
url: 'https://ocelot.social',
target: '_blank',
url: 'https://yunite.org/ueber-yunite/faq-hilfe/',
target: '',
},
internalPage: {
@ -140,13 +150,13 @@ export default {
SUPPORT,
FOOTER_LINK_LIST: [
ORGANIZATION,
TERMS_AND_CONDITIONS,
CODE_OF_CONDUCT,
// ORGANIZATION,
// TERMS_AND_CONDITIONS,
// CODE_OF_CONDUCT,
DATA_PRIVACY,
FAQ,
DONATE,
// FAQ,
// DONATE,
// SUPPORT,
IMPRINT,
SUPPORT,
],
}
}

View File

@ -2,19 +2,13 @@
// this are the paths in the webapp
export default {
LOGO_HEADER_PATH: '/img/custom/logo-horizontal.svg',
LOGO_HEADER_WIDTH: '130px',
LOGO_HEADER_WIDTH: '47px',
LOGO_HEADER_CLICK: {
// externalLink: {
// url: 'https://ocelot.social',
// target: '_blank',
// },
externalLink: null,
internalPath: {
to: {
name: 'index',
},
scrollTo: '.main-navigation',
externalLink: {
url: 'https://yunite.org',
target: '',
},
internalPath: null,
},
LOGO_SIGNUP_PATH: '/img/custom/logo-squared.svg',
LOGO_WELCOME_PATH: '/img/custom/logo-squared.svg',

View File

@ -1,9 +1,9 @@
// this file is duplicated in `backend/src/config/metadata.js` and `webapp/constants/metadata.js` and replaced on rebranding
export default {
APPLICATION_NAME: 'ocelot.social',
APPLICATION_SHORT_NAME: 'ocelot.social',
APPLICATION_DESCRIPTION: 'Ocelot Social Community',
COOKIE_NAME: 'ocelot-social-token',
ORGANIZATION_NAME: 'busFaktor e.V.',
ORGANIZATION_JURISDICTION: 'Deutschland',
APPLICATION_NAME: 'yunite.me',
APPLICATION_SHORT_NAME: 'yunite.me',
APPLICATION_DESCRIPTION: 'yunite.me Alternatives Netzwerk für eine freie und bunte Zukunft',
COOKIE_NAME: 'yunite-me-token',
ORGANIZATION_NAME: 'yunite Verein für Vernetzung und Kooperation',
ORGANIZATION_JURISDICTION: 'Switzerland',
}

View File

@ -1,2 +1,14 @@
{
"yuniteRebranding": {
"header": {
"about": "Über Yunite",
"groups": "Gruppen",
"newsFeed": "Beiträge",
"topics": "Themen"
},
"footer": {
"dataPrivacy": "Datenschutz",
"imprint": "Impressum"
}
}
}

View File

@ -1,2 +1,14 @@
{
"yuniteRebranding": {
"header": {
"about": "About Yunite",
"groups": "Groups",
"newsFeed": "News Feed",
"topics": "Topics"
},
"footer": {
"dataPrivacy": "Data privacy",
"imprint": "Imprint"
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 996 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1,3 +1,5 @@
/dns.values.yaml
/dns.values*-ME.yaml
/nginx.values.yaml
/values.yaml
/values*-ME.yaml

View File

@ -87,7 +87,7 @@ services:
########################################################
neo4j:
# name the image so that it cannot be found in a DockerHub repository, otherwise it will not be built locally from the 'dockerfile' but pulled from there
image: ocelotsocialnetwork/neo4j-community-branded:local-production
image: ocelotsocialnetwork/neo4j-community-branded:latest
networks:
- test-network
volumes:

View File

@ -1,14 +1,14 @@
{
"name": "ocelot-social-branded",
"name": "yunite.me",
"version": "2.2.0",
"ocelotDockerVersionTag": "2.3.0-281",
"dockerOrganisation": "ocelotsocialnetwork",
"description": "ocelot.social Branded",
"author": "ocelot.social Community",
"dockerOrganisation": "tirokk",
"description": "yunite.me Alternatives Netzwerk für eine freie und bunte Zukunft",
"author": "yunite Verein für Vernetzung und Kooperation",
"license": "MIT",
"private": false,
"repository": {
"type": "git",
"url": "https://github.com/Ocelot-Social-Community/Ocelot-Social-Deploy-Rebranding.git"
"url": "https://github.com/Yunite-Net/Yunite-Net-Ocelot-Social-Deploy-Rebranding"
}
}