Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • adaures/castopod
  • mkljczk/castopod-host
  • spaetz/castopod-host
  • PatrykMis/castopod
  • jonas/castopod
  • ajeremias/castopod
  • misuzu/castopod
  • KrzysztofDomanczyk/castopod
  • Behel/castopod
  • nebulon/castopod
  • ewen/castopod
  • NeoluxConsulting/castopod
  • nateritter/castopod-og
  • prcutler/castopod
14 results
Show changes
Commits on Source (874)
Showing with 1051 additions and 183 deletions
{
"projectName": "castopod",
"projectOwner": "adaures",
"repoType": "gitlab",
"repoHost": "https://code.castopod.org",
"files": ["README.md"],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "yassinedoghri",
"name": "Yassine Doghri",
"avatar_url": "https://avatars.githubusercontent.com/u/11021441?v=4",
"profile": "https://yassinedoghri.com",
"contributions": [
"code",
"bug",
"doc",
"review",
"maintenance",
"content",
"design",
"a11y",
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"question",
"mentoring",
"infra",
"ideas",
"projectManagement",
{
"type": "blog",
"url": "https://blog.castopod.org/author/yassinedoghri/"
}
]
},
{
"login": "benjamin",
"name": "Benjamin Bellamy",
"avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/2/avatar.png",
"profile": "https://code.castopod.org/benjamin",
"contributions": [
"code",
"bug",
"review",
"content",
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"question",
"infra",
"ideas",
{
"type": "blog",
"url": "https://blog.castopod.org/author/benjamin-bellamy/"
},
"projectManagement",
"talk"
]
},
{
"login": "ola",
"name": "Ola Hneini",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://github.com/ola-hn",
"contributions": [
"code",
"review",
"doc",
"maintenance",
"question",
"ideas"
]
},
{
"login": "rdelaage",
"name": "Romain de Laage",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://mamot.fr/@rdelaage",
"contributions": [
"code",
"infra",
"doc",
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"ideas"
]
},
{
"login": "Lyonel",
"name": "Lyonel Bernard",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://twitter.com/lyonelbernard",
"contributions": ["bug", "question", "audio", "ideas"]
},
{
"login": "ctlw83",
"name": "Christopher Lagonick-Weitzel",
"avatar_url": "https://secure.gravatar.com/avatar/7c2a721b52d0763673a600e8f01bd745?s=80&d=identicon",
"profile": "https://www.crypticchameleon.com/",
"contributions": ["bug", "question", "audio", "ideas"]
},
{
"login": "ernestoacostame",
"name": "Ernesto Acosta",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://ernestoacosta.me/",
"contributions": [
"bug",
"audio",
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"question",
"ideas"
]
},
{
"login": "3wen",
"name": "Ewen",
"avatar_url": "https://mastodon.fedi.bzh/system/accounts/avatars/000/000/002/original/6f387690a504ae46.jpg",
"profile": "https://mastodon.fedi.bzh/@ewen",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"ideas",
"code"
]
},
{
"login": "Behel",
"name": "Bastien Luneteau",
"avatar_url": "https://secure.gravatar.com/avatar/ad63ee8ef8e3db8253d21e5012d2724f?s=80&d=identicon",
"profile": "https://code.castopod.org/Behel",
"contributions": ["code", "bug"]
},
{
"login": "cecillie",
"name": "Cécile Ricordeau",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://www.cecillie.fr/",
"contributions": ["design"]
},
{
"login": "PatrykMis",
"name": "Patryk Miś",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/PatrykMis",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "mspanc",
"name": "Marcin Lewandowski",
"avatar_url": "https://secure.gravatar.com/avatar/eed8337939641eac5ad0b570bd6acf96?s=80&d=identicon",
"profile": "https://code.castopod.org/mspanc",
"contributions": ["bug", "ideas"]
},
{
"login": "SJanik",
"name": "Sebastian Janik",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/SJanik",
"contributions": ["code"]
},
{
"login": "patryk",
"name": "Patryk Karczmarczyk",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/patryk",
"contributions": ["code"]
},
{
"login": "ddenis",
"name": "denis d",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/ddenis",
"contributions": ["bug", "ideas"]
},
{
"login": "douglaskastle",
"name": "Douglas Kastle",
"avatar_url": "https://secure.gravatar.com/avatar/b7e652ba4b6bcd440afa069e7f7bc9e6?s=80&d=identicon",
"profile": "https://code.castopod.org/douglaskastle",
"contributions": ["bug", "ideas"]
},
{
"login": "cExplorer",
"name": "cExplorer",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/cExplorer",
"contributions": [
"bug",
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "imacrea",
"name": "ImaCrea",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/imacrea",
"contributions": ["bug", "ideas"]
},
{
"login": "jonas",
"name": "Jonas S",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/jonas",
"contributions": ["code"]
},
{
"login": "yannL",
"name": "LEFEBVRE Yann",
"avatar_url": "https://secure.gravatar.com/avatar/9c46600ce566ec6d526370d8e104b1c8?s=80&d=identicon",
"profile": "https://code.castopod.org/yannL",
"contributions": ["bug"]
},
{
"login": "spaetz",
"name": "Sebastian Späth",
"avatar_url": "https://secure.gravatar.com/avatar/278e1af65e82993efd0ba7bbbacf6435?s=80&d=identicon",
"profile": "https://code.castopod.org/spaetz",
"contributions": ["bug", "ideas"]
},
{
"login": "rocky",
"name": "rocky III",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/rocky",
"contributions": ["bug"]
},
{
"login": "Regenpfeifer",
"name": "Hermann Josef Eckl",
"avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/103/avatar.png",
"profile": "https://code.castopod.org/Regenpfeifer",
"contributions": ["bug"]
},
{
"login": "cyrilledel",
"name": "Delhaye Cyrille",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://code.castopod.org/cyrilledel",
"contributions": ["bug", "ideas"]
},
{
"login": "otetranome",
"name": "João Leandro",
"avatar_url": "https://code.castopod.org/uploads/-/system/user/avatar/113/avatar.png",
"profile": "https://twitter.com/otetranome",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
},
"ideas"
]
},
{
"login": "achouvardas",
"name": "Angelos Chouvardas",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://achouvardas.eu/",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "eivind",
"name": "Eivind",
"avatar_url": "https://mastodon.fjerland.no/system/accounts/avatars/107/769/768/295/192/222/original/e5c985fea6487dcb.jpg",
"profile": "https://mastodon.fjerland.no/@eivind",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "forght",
"name": "forght",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15073833/large/82d1e2e443a6df7edc43a7405dfeeb75_default.png",
"profile": "https://crowdin.com/profile/forght",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "glottis0q",
"name": "glottis0q",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15209934/large/8b17ef6a7399f0b82a8198f87c224195.png",
"profile": "https://crowdin.com/profile/glottis0q",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "BoFFire",
"name": "ButterflyOfFire",
"avatar_url": "https://static.mstdn.fr/static/accounts/avatars/000/065/901/original/5908e93ad5447f15.png",
"profile": "https://mstdn.fr/@ButterflyOfFire",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "lil5",
"name": "Lucian I. Last",
"avatar_url": "https://avatars.githubusercontent.com/u/17646836?v=4",
"profile": "https://github.com/lil5",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "LuuzViir",
"name": "LuuzViir",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/13166188/large/d03ab0abc7ce354b210d836955cd3805_default.png",
"profile": "https://crowdin.com/profile/luuzviir",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "cthtc",
"name": "CTHTC",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15211502/large/ed0651060cb8474a9519b5168bd377c1_default.png",
"profile": "https://crowdin.com/profile/cthtc",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "retrograde",
"name": "Russian Retro",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15021651/large/b10c4057f85bf4de49c7fdf01354ecde.jpeg",
"profile": "https://crowdin.com/profile/retrograde",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "mareklach",
"name": "Marek L'ach",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/13572324/large/3eeba8d569c247ace33862bf4ef4748f.jpeg",
"profile": "https://crowdin.com/profile/mareklach",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "GunChleoc",
"name": "GunChleoc",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/13043878/large/3223f7b606296a8b1c92c5de39c459a2_default.png",
"profile": "https://crowdin.com/profile/gunchleoc",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "GabiSnow",
"name": "GabiSnow",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15214858/large/5b083bdf9c9e9de67cc6ee72a6c8db18_default.png",
"profile": "https://crowdin.com/profile/gabisnow",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "bendaha",
"name": "bendaha",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15331656/large/cd92450d2c20202299fb3a0075903e20_default.png",
"profile": "https://crowdin.com/profile/bendaha",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "samuelroland",
"name": "Samuel Roland",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/14980053/large/3e154a37d03d6e98ae402ed3f930f4f5.png",
"profile": "https://crowdin.com/profile/samuelroland",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "dimregnier",
"name": "Dimitri Regnier",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://dimitriregnier.net/",
"contributions": ["ideas"]
},
{
"login": "irithys",
"name": "irithys",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15405614/large/3086461c47cce0a0c031925e5f943412.png",
"profile": "https://im.irithys.com/@thy",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "caos30",
"name": "Sergi",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://twitter.com/caos30",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "basen1982",
"name": "Andreas Olsson",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://crowdin.com/profile/basen1982",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "leonfrom",
"name": "leonfrom",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://crowdin.com/profile/leonfrom",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "agentcobra57",
"name": "agentcobra",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://crowdin.com/profile/agentcobra57",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "alephoto85",
"name": "Alessandro",
"avatar_url": "https://crowdin-static.downloads.crowdin.com/avatar/15094649/large/530391f54157af52ae33058ec15b0f99.jpg",
"profile": "https://crowdin.com/profile/alephoto85",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "liimee",
"name": "liimee",
"avatar_url": "https://castopod.org/assets/images/castopod-avatar.jpg",
"profile": "https://crowdin.com/profile/liimee",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "ahmedsabouni",
"name": "Ahmed Sabouni",
"avatar_url": "https://avatars.githubusercontent.com/u/74497842?v=4",
"profile": "https://github.com/ahmedsabouni",
"contributions": [
{
"type": "translation",
"url": "https://translate.castopod.org"
}
]
},
{
"login": "KrzysztofDomanczyk",
"name": "KrzysztofDomanczyk",
"avatar_url": "https://avatars.githubusercontent.com/u/75178474?v=4",
"profile": "https://github.com/KrzysztofDomanczyk",
"contributions": ["code"]
},
{
"login": "Dwev",
"name": "Guy Martin",
"avatar_url": "https://avatars.githubusercontent.com/u/46626050?v=4",
"profile": "https://github.com/Dwev",
"contributions": ["bug", "code"]
},
{
"login": "prcutler",
"name": "Paul Cutler",
"avatar_url": "https://avatars.githubusercontent.com/u/67276?v=4",
"profile": "https://github.com/prcutler",
"contributions": ["doc", "question", "ideas"]
},
{
"login": "nateritter",
"name": "Nate Ritter",
"avatar_url": "https://avatars.githubusercontent.com/u/198798?v=4",
"profile": "https://github.com/nateritter",
"contributions": ["code"]
}
],
"commitConvention": "none"
}
{
"presets": ["@babel/preset-typescript", "@babel/preset-env"],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
#################################################### ####################################################
# Castopod Host development Docker file # Castopod development Docker file
#################################################### ####################################################
# ⚠️ NOT optimized for production # ⚠️ NOT optimized for production
# should be used only for development purposes # should be used only for development purposes
#--------------------------------------------------- #---------------------------------------------------
FROM php:8.0-fpm FROM php:8.4-fpm
LABEL maintainer="Yassine Doghri <yassine@doghri.fr>" LABEL maintainer="Yassine Doghri <yassine@doghri.fr>"
COPY . /castopod-host
WORKDIR /castopod-host
# Install composer # Install composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
# Install server requirements # Install server requirements
RUN apt-get update \ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
# gnupg to sign commits with gpg
&& apt-get install --yes --no-install-recommends gnupg \
# npm through the nodejs package
&& curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get update \ && apt-get update \
&& apt-get install --yes --no-install-recommends nodejs \ && apt-get install --yes --no-install-recommends nodejs \
# update npm # gnupg to sign commits with gpg
&& npm install --global npm@7 \ gnupg \
&& apt-get update \
&& apt-get install --yes --no-install-recommends \
git \
openssh-client \ openssh-client \
vim \
# cron for scheduled tasks # cron for scheduled tasks
cron \ cron \
# unzip used by composer # unzip used by composer
...@@ -37,26 +26,25 @@ RUN apt-get update \ ...@@ -37,26 +26,25 @@ RUN apt-get update \
# https://github.com/mlocati/docker-php-extension-installer (included in php's docker image) # https://github.com/mlocati/docker-php-extension-installer (included in php's docker image)
libicu-dev \ libicu-dev \
libpng-dev \ libpng-dev \
libjpeg-dev \ libwebp-dev \
libjpeg62-turbo-dev \
libfreetype6-dev \
zlib1g-dev \ zlib1g-dev \
libzip-dev \ libzip-dev \
# ffmpeg for video encoding
ffmpeg \
# intl for Internationalization # intl for Internationalization
&& docker-php-ext-install intl \ && docker-php-ext-install intl \
&& docker-php-ext-install zip \ && docker-php-ext-install zip \
# gd for image processing # gd for image processing
&& docker-php-ext-configure gd --with-jpeg \ && docker-php-ext-configure gd --with-webp --with-jpeg --with-freetype \
&& docker-php-ext-install gd \ && docker-php-ext-install gd \
&& docker-php-ext-install exif \
&& docker-php-ext-enable exif \
# redis extension for cache # redis extension for cache
&& pecl install -o -f redis \ && pecl install -o -f redis \
&& rm -rf /tmp/pear \ && rm -rf /tmp/pear \
&& docker-php-ext-enable redis \ && docker-php-ext-enable redis \
# mysqli for database access # mysqli for database access
&& docker-php-ext-install mysqli \ && docker-php-ext-install mysqli \
&& docker-php-ext-enable mysqli \ && docker-php-ext-enable mysqli
# configure php
&& echo "file_uploads = On\n" \
"memory_limit = 512M\n" \
"upload_max_filesize = 500M\n" \
"post_max_size = 512M\n" \
"max_execution_time = 300\n" \
> /usr/local/etc/php/conf.d/uploads.ini \
* * * * * /usr/local/bin/php /workspaces/castopod/spark tasks:run >> /dev/null 2>&1
// For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at: // For format details, see https://aka.ms/vscode-remote/devcontainer.json or this file's README at:
// https://github.com/microsoft/vscode-dev-containers/tree/v0.117.1/containers/docker-existing-dockerfile // https://github.com/microsoft/vscode-dev-containers/tree/v0.117.1/containers/docker-existing-dockerfile
{ {
"name": "Castopod Host dev", "name": "castopod.local",
"dockerComposeFile": ["../docker-compose.yml", "./docker-compose.yml"], "dockerComposeFile": ["./docker-compose.yml"],
"service": "app", "service": "app",
"workspaceFolder": "/castopod-host", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
"postCreateCommand": "composer install && npm install && npm run build:dev", "postCreateCommand": "composer install && pnpm install && pnpm run build:static && php spark migrate --all && php spark db:seed DevSeeder",
"postStartCommand": "crontab ./crontab && cron && php spark serve --host 0.0.0.0", "postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder} && crontab .devcontainer/crontab && cron && php spark serve --host 0.0.0.0",
"postAttachCommand": "crontab ./crontab && service cron reload", "postAttachCommand": "crontab .devcontainer/crontab && service cron reload",
"shutdownAction": "stopCompose", "shutdownAction": "stopCompose",
"settings": { "features": {
"terminal.integrated.defaultProfile.linux": "/bin/bash", "ghcr.io/devcontainers/features/git:1": {},
"editor.formatOnSave": true, "ghcr.io/guiyomh/features/vim:0": {},
"[php]": { "ghcr.io/NicoVIII/devcontainer-features/pnpm:2": {}
"editor.defaultFormatter": "bmewburn.vscode-intelephense-client",
"editor.formatOnSave": false
},
"color-highlight.markerType": "dot-before",
"files.associations": {
"*.xml.dist": "xml",
"spark": "php"
}
}, },
"extensions": [ "customizations": {
"mikestead.dotenv", "vscode": {
"bmewburn.vscode-intelephense-client", "settings": {
"streetsidesoftware.code-spell-checker", "editor.formatOnSave": true,
"naumovs.color-highlight", "editor.defaultFormatter": "esbenp.prettier-vscode",
"heybourn.headwind", "[php]": {
"wayou.vscode-todo-highlight", "editor.defaultFormatter": "bmewburn.vscode-intelephense-client",
"esbenp.prettier-vscode", "editor.formatOnSave": false
"bradlc.vscode-tailwindcss", },
"jamesbirtles.svelte-vscode", "css.validate": false,
"dbaeumer.vscode-eslint", "color-highlight.markerType": "dot-before",
"stylelint.vscode-stylelint", "files.associations": {
"eamodio.gitlens", "*.xml.dist": "xml",
"breezelin.phpstan", "spark": "php",
"kasik96.latte" "env": "dotenv",
] ".rsync-filter": "diff"
},
"json.schemas": [
{
"fileMatch": [
"plugins/**/manifest.json",
"tests/modules/Plugins/mocks/manifests/*.json",
"tests/modules/Plugins/mocks/plugins/**/manifest.json"
],
"url": "/workspaces/castopod/modules/Plugins/Manifest/manifest.schema.json"
}
]
},
"extensions": [
"astro-build.astro-vscode",
"bmewburn.vscode-intelephense-client",
"bradlc.vscode-tailwindcss",
"breezelin.phpstan",
"DavidAnson.vscode-markdownlint",
"dbaeumer.vscode-eslint",
"eamodio.gitlens",
"esbenp.prettier-vscode",
"heybourn.headwind",
"jamesbirtles.svelte-vscode",
"kasik96.latte",
"mikestead.dotenv",
"naumovs.color-highlight",
"pflannery.vscode-versionlens",
"runem.lit-plugin",
"streetsidesoftware.code-spell-checker",
"stylelint.vscode-stylelint",
"unifiedjs.vscode-mdx",
"wayou.vscode-todo-highlight",
"yzhang.markdown-all-in-one",
"42Crunch.vscode-openapi"
]
}
}
} }
version: "3" version: "3"
services: services:
app: app:
build:
context: .
dockerfile: Dockerfile
ports:
- 8080:8080
volumes:
- ../..:/workspaces:cached
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
environment:
CI_ENVIRONMENT: development
vite_environment: development
app_forceGlobalSecureRequests: 0 #false
app_baseURL: http://localhost:8080/
media_baseURL: http://localhost:8080/
admin_gateway: cp-admin
auth_gateway: cp-auth
analytics_salt: dev_analytics_salt
database_default_hostname: mariadb
database_default_database: castopod
database_default_username: castopod
database_default_password: castopod
database_default_DBPrefix: cp_
restapi_enabled: 1 #true
email_fromEmail: hello@castopod.local
email_SMTPCrypto: ""
email_SMTPHost: mailpit
email_SMTPUser: castopod
email_SMTPPass: castopod
email_SMTPPort: 1025
depends_on:
- redis
- mariadb
redis:
image: redis:alpine
volumes:
- redis:/data
mariadb:
image: mariadb:10.2
volumes:
- ./initdb:/docker-entrypoint-initdb.d
- mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: castopod
MYSQL_USER: castopod
MYSQL_PASSWORD: castopod
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
environment:
PMA_HOST: mariadb
PMA_PORT: 3306
UPLOAD_LIMIT: 300M
ports:
- 8888:80
volumes:
- phpmyadmin:/sessions
depends_on:
- mariadb
mailpit:
image: axllent/mailpit
restart: always
volumes: volumes:
# Mounts the project folder to '/workspace'. While this file is in .devcontainer, - mailpit:/data
# mounts are relative to the first file in the list, which is a level up. ports:
- .:/castopod-host:cached - 8025:8025
- 1025:1025
environment:
MP_MAX_MESSAGES: 5000
MP_DATA_FILE: /data/mailpit.db
MP_SMTP_AUTH_ACCEPT_ANY: 1
MP_SMTP_AUTH_ALLOW_INSECURE: 1
# Overrides default command so things don't shut down after the process ends. volumes:
command: /bin/sh -c "while sleep 1000; do :; done" redis:
mariadb:
phpmyadmin:
mailpit:
CREATE DATABASE IF NOT EXISTS `test`;
GRANT ALL ON `test`.* TO 'castopod'@'%';
file_uploads = On
memory_limit = 512M
upload_max_filesize = 500M
post_max_size = 512M
max_execution_time = 300
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# Example Environment Configuration file # Example Environment Configuration file
# #
# This file can be used as a starting point for # This file can be used as a starting point for
# your Castopod Host instance settings. # your Castopod instance settings.
# #
# For manual configuration: # For manual configuration:
# - copy this file's contents to a file named `.env` # - copy this file's contents to a file named `.env`
...@@ -14,9 +14,10 @@ ...@@ -14,9 +14,10 @@
# Instance configuration # Instance configuration
#-------------------------------------------------------------------- #--------------------------------------------------------------------
app.baseURL="https://YOUR_DOMAIN_NAME/" app.baseURL="https://YOUR_DOMAIN_NAME/"
app.mediaBaseURL="https://YOUR_MEDIA_DOMAIN_NAME/" media.baseURL="https://YOUR_MEDIA_DOMAIN_NAME/"
app.adminGateway="cp-admin" admin.gateway="cp-admin"
app.authGateway="cp-auth" auth.gateway="cp-auth"
analytics.salt="RANDOM_STRING_OF_64_CHARACTERS"
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Database configuration # Database configuration
...@@ -27,6 +28,14 @@ database.default.username="root" ...@@ -27,6 +28,14 @@ database.default.username="root"
database.default.password="****" database.default.password="****"
database.default.DBPrefix="cp_" database.default.DBPrefix="cp_"
#--------------------------------------------------------------------
# Email configuration
#--------------------------------------------------------------------
# email.fromEmail="your_email_address"
# email.SMTPHost="your_smtp_host"
# email.SMTPUser="your_smtp_user"
# email.SMTPPass="your_smtp_password"
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Cache configuration (advanced) # Cache configuration (advanced)
# #
...@@ -41,3 +50,21 @@ cache.handler="file" ...@@ -41,3 +50,21 @@ cache.handler="file"
# cache.redis.password=null # cache.redis.password=null
# cache.redis.port=6379 # cache.redis.port=6379
# cache.redis.database=0 # cache.redis.database=0
#--------------------------------------------------------------------
# S3 configuration
#--------------------------------------------------------------------
# media.fileManager="s3"
# media.s3.endpoint="your_s3_host"
# media.s3.key="your_s3_key"
# media.s3.secret="your_s3_secret"
# media.s3.region="your_s3_region"
#--------------------------------------------------------------------
# REST API configuration
#--------------------------------------------------------------------
# restapi.enabled=true
# restapi.basicAuthUsername=castopod
# restapi.basicAuthPassword=password
# restapi.basicAuth=true
{
"env": {
"browser": true,
"es2020": true
},
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:prettier/recommended"
],
"parserOptions": {
"ecmaVersion": 11,
"sourceType": "module"
},
"rules": {}
}
open_collective: castopod
...@@ -60,10 +60,14 @@ writable/logs/* ...@@ -60,10 +60,14 @@ writable/logs/*
writable/session/* writable/session/*
!writable/session/index.html !writable/session/index.html
writable/temp/*
!writable/temp/index.html
writable/uploads/* writable/uploads/*
!writable/uploads/index.html !writable/uploads/index.html
writable/debugbar/* writable/debugbar/*
!writable/debugbar/.gitkeep
php_errors.log php_errors.log
...@@ -82,6 +86,7 @@ tests/coverage* ...@@ -82,6 +86,7 @@ tests/coverage*
# Don't save phpunit under version control. # Don't save phpunit under version control.
phpunit phpunit
.phpunit.cache
#------------------------- #-------------------------
# Composer # Composer
...@@ -123,14 +128,16 @@ nb-configuration.xml ...@@ -123,14 +128,16 @@ nb-configuration.xml
# Visual Studio Code # Visual Studio Code
.vscode/ .vscode/
.history/
tmp/
/results/ /results/
/phpunit*.xml /phpunit*.xml
/.phpunit.*.cache
# npm # js package manager
yarn.lock yarn.lock
node_modules node_modules
.pnpm-store
# JS # JS
.cache .cache
...@@ -140,14 +147,21 @@ public/* ...@@ -140,14 +147,21 @@ public/*
!public/media !public/media
!public/.htaccess !public/.htaccess
!public/favicon.ico !public/favicon.ico
!public/icon*
!public/castopod-banner*
!public/castopod-avatar*
!public/index.php !public/index.php
!public/robots.txt !public/robots.txt
!public/.well-known
!public/.well-known/GDPR.yml
public/assets/*
!public/assets/index.html
# public media folder # public media folder
public/media/*
!public/media/index.html
!public/media/podcasts !public/media/podcasts
!public/media/persons !public/media/persons
!public/media/site
public/media/podcasts/* public/media/podcasts/*
!public/media/podcasts/index.html !public/media/podcasts/index.html
...@@ -155,9 +169,11 @@ public/media/podcasts/* ...@@ -155,9 +169,11 @@ public/media/podcasts/*
public/media/persons/* public/media/persons/*
!public/media/persons/index.html !public/media/persons/index.html
public/media/site/*
!public/media/site/index.html
# Generated files # Generated files
app/Language/en/PersonsTaxonomy.php modules/Admin/Language/*/PersonsTaxonomy.php
app/Language/fr/PersonsTaxonomy.php
#------------------------- #-------------------------
# Docker volumes # Docker volumes
...@@ -166,8 +182,13 @@ app/Language/fr/PersonsTaxonomy.php ...@@ -166,8 +182,13 @@ app/Language/fr/PersonsTaxonomy.php
mariadb mariadb
phpmyadmin phpmyadmin
sessions sessions
data
# Castopod bundle & packages
castopod/
castopod-*.zip
castopod-*.tar.gz
# Castopod Host bundle & packages # Plugins
castopod-host/ plugins/*
castopod-host-*.zip !plugins/.gitkeep
castopod-host-*.tar.gz
image: php:8.0-fpm image: code.castopod.org:5050/adaures/castopod:ci-php8.4
stages: stages:
- prepare
- quality - quality
- bundle - bundle
- release - release
- deploy
- build
cache: php-dependencies:
paths: stage: prepare
- vendor/ script:
- node_modules/ # Install all php dependencies
- composer install --prefer-dist --no-ansi --no-interaction --no-progress --ignore-platform-reqs
before_script: cache:
- apt-get update -y key:
files:
# Install git which is required by composer (the php image doesn't have it) - composer.lock
- apt-get install git -y paths:
- .composer-cache
- apt-get install -y libicu-dev artifacts:
expire_in: 30 mins
# Install intl PHP extension for tests paths:
- docker-php-ext-install intl - vendor/
# Install composer
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- php composer-setup.php
- php -r "unlink('composer-setup.php');"
# Install latest npm
- curl -sL https://deb.nodesource.com/setup_lts.x | bash -
- apt-get update && apt-get install -y nodejs
- npm install --global npm
# Install all php dependencies js-dependencies:
- php composer.phar install --prefer-dist --no-ansi --no-interaction --no-progress --ignore-platform-reqs stage: prepare
script:
# Install all js dependencies
- pnpm install
cache:
key:
files:
- pnpm-lock.yaml
paths:
- .pnpm-store
artifacts:
expire_in: 30 mins
paths:
- node_modules/
tests: lint-commit-msg:
stage: quality stage: quality
script: script:
# run phpunit without code coverage - chmod +x ./scripts/lint-commit-msg.sh
# TODO: add code coverage # lint commit message
- vendor/bin/phpunit --no-coverage - ./scripts/lint-commit-msg.sh
dependencies:
- js-dependencies
only:
- develop
- main
- beta
- alpha
- next
code-style: lint-php:
stage: quality stage: quality
script: script:
# check php code style
- vendor/bin/ecs check --ansi - vendor/bin/ecs check --ansi
# phpstan - increase memory limit to 1GB to prevent script failure
- php -d memory_limit=1G vendor/bin/phpstan analyse --ansi
# run rector to check for php errors
- vendor/bin/rector process --dry-run --ansi
dependencies:
- php-dependencies
static-analysis: lint-js:
stage: quality stage: quality
script: script:
# increase memory limit to 1GB because of script failure - pnpm run format
- php -d memory_limit=1G vendor/bin/phpstan analyse --ansi - pnpm run typecheck
- pnpm run lint
- pnpm run lint:css
dependencies:
- js-dependencies
code-review: tests:
stage: quality stage: quality
services:
- mariadb:10.11
variables:
MYSQL_ROOT_PASSWORD: "R00Tp4ssW0RD"
MYSQL_DATABASE: "test"
MYSQL_USER: "castopod"
MYSQL_PASSWORD: "castopod"
script: script:
- vendor/bin/rector process --dry-run --ansi - echo "SHOW DATABASES;" | mariadb --user=root --password="$MYSQL_ROOT_PASSWORD" --host=mariadb "$MYSQL_DATABASE" --skip_ssl
# run phpunit without code coverage
# TODO: add code coverage
- vendor/bin/phpunit --no-coverage
dependencies:
- php-dependencies
bundle_app: bundle:
stage: bundle stage: bundle
before_script:
# prepare dependencies before bundling
- chmod +x ./scripts/bundle-prepare.sh
- ./scripts/bundle-prepare.sh
script: script:
# make scripts/bundle.sh executable # make scripts/bundle.sh executable
- chmod +x ./scripts/bundle-prepare.sh
- chmod +x ./scripts/bundle.sh - chmod +x ./scripts/bundle.sh
# bundle castopod-host with commit ref as version # bundle castopod with commit ref as version
- ./scripts/bundle-prepare.sh
- ./scripts/bundle.sh ${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA} - ./scripts/bundle.sh ${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}
dependencies:
- php-dependencies
- js-dependencies
artifacts: artifacts:
name: "castopod-host-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}" name: "castopod-${CI_COMMIT_REF_SLUG}_${CI_COMMIT_SHORT_SHA}"
paths: paths:
- castopod-host - castopod
only:
variables:
- $CI_PROJECT_NAMESPACE == "adaures"
except: except:
- main - main
- beta - beta
- alpha - alpha
- next
release_app: release:
stage: release stage: release
before_script:
# IMPORTANT: delete local git tags before release to prevent eventual script failure (ie. tag already exists)
- git tag | xargs git tag -d
# prepare dependencies before release, both bundle and package scripts will be run by semantic-release
- chmod +x ./scripts/bundle-prepare.sh
- ./scripts/bundle-prepare.sh
script: script:
# make release scripts executable # make release scripts executable
- chmod +x ./scripts/bundle-prepare.sh
- chmod +x ./scripts/bundle.sh - chmod +x ./scripts/bundle.sh
- chmod +x ./scripts/package.sh - chmod +x ./scripts/package.sh
# prepare bundle before release, both bundle and package scripts will be run by semantic-release
- ./scripts/bundle-prepare.sh
# IMPORTANT: delete local git tags before release to prevent eventual script failure (ie. tag already exists)
- git tag | xargs git tag -d
# run semantic-release script (configured in `.releaserc.json` file) # run semantic-release script (configured in `.releaserc.json` file)
- npm run release - pnpm run release
dependencies:
- php-dependencies
- js-dependencies
artifacts:
paths:
- castopod
- CP_VERSION.env
only: only:
- main - main
- beta
- alpha - alpha
- next
website:
stage: deploy
trigger: adaures/castopod.org
only:
- main
- beta - beta
- alpha
documentation:
stage: deploy
trigger:
include: docs/.gitlab-ci.yml
strategy: depend
docker:
stage: build
trigger:
include: docker/production/.gitlab-ci.yml
strategy: depend
variables:
PARENT_PIPELINE_ID: $CI_PIPELINE_ID
only:
refs:
- develop
- main
- beta
- alpha
- next
variables:
- $CI_PROJECT_NAMESPACE == "adaures"
### Before submitting an issue
1. **Use the issue search** &mdash; check if the issue has already been
reported.
2. **Check if the issue has been fixed** &mdash; try to reproduce it using the
latest release.
3. **Isolate the problem** &mdash; ideally create a
[reduced test case](https://css-tricks.com/reduced-test-cases/) and a live
example.
4. **Select an issue template** &mdash; choose a template from `bug` or
`feature-request` and fill out the info you deem necessary. The more context
we get, the easier it is to implement the feature or fix the bug you report.
Check out the [CONTRIBUTING manual](../../CONTRIBUTING.md) for more info.
#!/bin/sh pnpm exec commitlint --verbose --edit "$1"
. "$(dirname "$0")/_/husky.sh"
npx --no-install commitlint --edit "$1"
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npm run typecheck
npx lint-staged
# CaptainHook 5.10.0 # CaptainHook 5.10.0
INTERACTIVE="--no-interaction" INTERACTIVE="--no-interaction"
vendor/bin/captainhook $INTERACTIVE --configuration=captainhook.json --bootstrap=vendor/autoload.php hook:pre-commit "$@" <&0 vendor/bin/captainhook $INTERACTIVE --configuration=captainhook.json --bootstrap=vendor/autoload.php hook:pre-commit "$@" <&0
pnpm run typecheck
pnpm exec lint-staged
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
# CaptainHook 5.10.0 # CaptainHook 5.10.0
INTERACTIVE="--no-interaction" INTERACTIVE="--no-interaction"
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
"trailingComma": "es5", "trailingComma": "es5",
"overrides": [ "overrides": [
{ {
"files": "*.md", "files": ["*.md", "*.mdx"],
"options": { "options": {
"proseWrap": "always" "proseWrap": "always"
} }
......
{ {
"branches": [ "branches": [
"main", "main",
{ "name": "alpha", "prerelease": true }, {
{ "name": "beta", "prerelease": true } "name": "alpha",
"prerelease": true
},
{
"name": "beta",
"prerelease": true
},
{
"name": "next",
"prerelease": true
}
], ],
"plugins": [ "plugins": [
"@semantic-release/commit-analyzer", [
"@semantic-release/release-notes-generator", "@semantic-release/commit-analyzer",
{
"preset": "conventionalcommits",
"releaseRules": [
{
"type": "docs",
"scope": "README",
"release": "patch"
},
{
"type": "refactor",
"scope": "core-*",
"release": "minor"
},
{
"type": "refactor",
"release": "patch"
}
],
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
}
}
],
[
"@semantic-release/release-notes-generator",
{
"preset": "conventionalcommits",
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES", "BREAKING"]
},
"presetConfig": {
"types": [
{
"type": "feat",
"section": "Features"
},
{
"type": "fix",
"section": "Bug Fixes"
},
{
"type": "chore",
"section": "Internal",
"hidden": false
},
{
"type": "refactor",
"section": "Internal",
"hidden": false
},
{
"type": "perf",
"section": "Internal",
"hidden": false
}
]
}
}
],
"@semantic-release/changelog", "@semantic-release/changelog",
[ [
"@semantic-release/exec", "@semantic-release/exec",
{ {
"prepareCmd": "./scripts/bundle.sh ${nextRelease.version} && ./scripts/package.sh" "prepareCmd": "./scripts/bundle.sh ${nextRelease.version} && ./scripts/package.sh ${nextRelease.version} && pnpm exec prettier --write CHANGELOG.md"
} }
], ],
"@semantic-release/npm", "@semantic-release/npm",
...@@ -30,15 +99,15 @@ ...@@ -30,15 +99,15 @@
[ [
"@semantic-release/gitlab", "@semantic-release/gitlab",
{ {
"gitlabUrl": "https://code.podlibre.org/", "gitlabUrl": "https://code.castopod.org/",
"assets": [ "assets": [
{ {
"path": "castopod-host-*.zip", "path": "castopod-*.zip",
"label": "Castopod Host Package (zip)" "label": "Castopod Package (zip)"
}, },
{ {
"path": "castopod-host-*.tar.gz", "path": "castopod-*.tar.gz",
"label": "Castopod Host Package (tar.gz)" "label": "Castopod Package (tar.gz)"
} }
] ]
} }
......
# rsync filter rules to copy required files for Castopod Host's bundle # rsync filter rules to copy required files for Castopod's bundle
- app/Views/_assets/ + resources/icons/***
- resources/**
+ app/*** + app/***
+ modules/***
+ plugins/***
+ public/*** + public/***
+ themes/***
+ vendor/*** + vendor/***
+ writable/*** + writable/***
+ .env.example + .env.example
+ DEPENDENCIES.md
+ LICENSE.md + LICENSE.md
+ README.md + README.md
+ INSTALL.md + spark
+ UPDATE.md + php-icons.php
- ** - **