diff --git a/.build/ci-helper b/.build/ci-helper new file mode 100755 index 000000000..b799e7228 --- /dev/null +++ b/.build/ci-helper @@ -0,0 +1,49 @@ +#!/bin/bash +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [ "$CI" = "true" ]; then + echo "Running in CI environment, skipping variable fetching..." +else + # Remove 'git@gitlab.com:' and '.git' and Extract namespace and project name + GIT_REMOTE_URL=$(git config --get remote.origin.url) + GITLAB_PATH=$(echo "$GIT_REMOTE_URL" | sed -e 's/^git@git.shihaam.dev://' -e 's/\.git$//') + CI_PROJECT_NAMESPACE=$(echo "$GITLAB_PATH" | awk -F/ '{OFS="/"; $NF=""; print $0}' | sed 's:/$::') + CI_PROJECT_NAME=$(basename "$GITLAB_PATH") + # Set the registry image path + + CI_REGISTRY_IMAGE="git.shihaam.dev/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME" + + # Other variables + CI_COMMIT_SHORT_SHA=$(git rev-parse HEAD | cut -c1-8) + CI_COMMIT_SHA=$(git rev-parse HEAD) + CI_COMMIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +fi + +CI_COMMIT_BRANCH=$(echo $CI_COMMIT_BRANCH | sed 's/\//-/g') # sanitize branch name + +export CI_COMMIT_SHORT_SHA +export CI_COMMIT_SHA +export CI_COMMIT_BRANCH +export CI_REGISTRY_IMAGE + + +echo "Commit hash: $CI_COMMIT_SHA" +echo "Branch: $CI_COMMIT_BRANCH" +echo "Registry image: $CI_REGISTRY_IMAGE" + +if [ "$1" = "push" ]; then + docker compose push + if [[ "$CI_COMMIT_BRANCH" == "master" || "$CI_COMMIT_BRANCH" == "main" ]]; then + docker tag $CI_REGISTRY_IMAGE/fpm:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/fpm:latest + docker tag $CI_REGISTRY_IMAGE/nginx:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/nginx:latest + docker push $CI_REGISTRY_IMAGE/fpm:latest + docker push $CI_REGISTRY_IMAGE/nginx:latest + elif [[ "$CI_COMMIT_BRANCH" == "staging" ]]; then + docker tag $CI_REGISTRY_IMAGE/fpm:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/fpm:staging + docker tag $CI_REGISTRY_IMAGE/nginx:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA $CI_REGISTRY_IMAGE/nginx:staging + docker push $CI_REGISTRY_IMAGE/fpm:staging + docker push $CI_REGISTRY_IMAGE/nginx:staging + fi +else + docker compose $@ +fi diff --git a/.build/compose.yml b/.build/compose.yml new file mode 100644 index 000000000..838d170d4 --- /dev/null +++ b/.build/compose.yml @@ -0,0 +1,21 @@ +services: + fpm: + build: + context: ../ + dockerfile: .build/fpm.Dockerfile + args: + CI_COMMIT_SHORT_SHA: ${CI_COMMIT_SHORT_SHA} + CI_COMMIT_SHA: ${CI_COMMIT_SHA} + CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} + hostname: fpm + image: $CI_REGISTRY_IMAGE/fpm:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA + nginx: + build: + context: . + dockerfile: nginx.Dockerfile + args: + CI_COMMIT_SHORT_SHA: ${CI_COMMIT_SHORT_SHA} + CI_COMMIT_SHA: ${CI_COMMIT_SHA} + CI_COMMIT_BRANCH: ${CI_COMMIT_BRANCH} + hostname: nginx + image: $CI_REGISTRY_IMAGE/nginx:$CI_COMMIT_BRANCH-$CI_COMMIT_SHORT_SHA diff --git a/.build/fpm.Dockerfile b/.build/fpm.Dockerfile new file mode 100644 index 000000000..07c7931cf --- /dev/null +++ b/.build/fpm.Dockerfile @@ -0,0 +1,36 @@ +FROM composer:2.7.9 AS composer + +FROM git.shihaam.dev/dockerfiles/php-fpm:8.2 AS composerinstall + +WORKDIR /var/www/html +COPY .. /var/www/html +COPY --from=composer /usr/bin/composer /usr/bin/composer + +RUN --mount=type=cache,target=/root/.composer/cache \ + composer install --no-interaction --no-dev --optimize-autoloader + +FROM git.shihaam.dev/dockerfiles/php-fpm:8.2 + +# Use bash as the default shell +SHELL ["/bin/bash", "-c"] + +WORKDIR /var/www/html +COPY --from=composerinstall /var/www/html /var/www/html/ + +# Set the git envs +ARG CI_COMMIT_SHORT_SHA +ARG CI_COMMIT_SHA +ARG CI_COMMIT_BRANCH +ENV CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA +ENV CI_COMMIT_SHA=$CI_COMMIT_SHA +ENV CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH + +RUN chown -R www-data:www-data storage/ \ + && chmod -R ug+rw storage \ + && chmod -R ug+x storage/framework storage/logs \ + && chmod -R ug+rw bootstrap/cache \ + && chmod -R ug+x bootstrap/cache +RUN php artisan storage:link + +# expose public dir for nginx to serve static files +VOLUME /var/www/html/public diff --git a/.build/nginx.Dockerfile b/.build/nginx.Dockerfile new file mode 100644 index 000000000..2fff757f1 --- /dev/null +++ b/.build/nginx.Dockerfile @@ -0,0 +1,10 @@ +FROM git.shihaam.dev/dockerfiles/nginx-fpm:latest + + +# Set the git envs +ARG CI_COMMIT_SHORT_SHA +ARG CI_COMMIT_SHA +ARG CI_COMMIT_BRANCH +ENV CI_COMMIT_SHORT_SHA=$CI_COMMIT_SHORT_SHA +ENV CI_COMMIT_SHA=$CI_COMMIT_SHA +ENV CI_COMMIT_BRANCH=$CI_COMMIT_BRANCH diff --git a/compose.yml b/compose.yml new file mode 100644 index 000000000..fe28f5ff0 --- /dev/null +++ b/compose.yml @@ -0,0 +1,32 @@ +services: + fpm: + hostname: fpm + image: git.shihaam.dev/shihaam/akaunting/fpm + volumes: + - ./:/var/www/html/ + nginx: + hostname: nginx + image: git.shihaam.dev/shihaam/akaunting/nginx + volumes_from: + - fpm + ports: + - 9000:80 +# composer: +# hostname: composer +# image: composer:2.7.9 +# volumes: +# - ./:/var/www/html/ +# working_dir: /var/www/html + mariadb: + image: mariadb:11.5.2 + hostname: mariadb + restart: always + environment: + - MYSQL_RANDOM_ROOT_PASSWORD=yes + - MYSQL_USER=user + - MYSQL_PASSWORD=password + - MYSQL_DATABASE=database + volumes: + - db:/var/lib/mysql +volumes: + db: