diff --git a/.github/workflows/install-deps.yml b/.github/workflows/install-deps.yml index 1ed48d5..dcb827d 100644 --- a/.github/workflows/install-deps.yml +++ b/.github/workflows/install-deps.yml @@ -27,7 +27,7 @@ jobs: name: 📦 Install Dependencies runs-on: self-hosted container: - image: code.esy-web.dev/jovann/actions:latest + image: registre.esy-web.dev/actions:latest steps: - name: Checkout code @@ -57,7 +57,7 @@ jobs: runs-on: self-hosted needs: install container: - image: code.esy-web.dev/jovann/actions:latest + image: registre.esy-web.dev/actions:latest env: APP_ENV: test MESSENGER_TRANSPORT_DSN: redis://127.0.0.1:15433/messages diff --git a/docker/actions/Dockerfile b/docker/actions/Dockerfile new file mode 100644 index 0000000..245bb91 --- /dev/null +++ b/docker/actions/Dockerfile @@ -0,0 +1,123 @@ +# Use the official Debian 12.11 (Bookworm) image as the base +FROM debian:12.11 + +# Set environment variables to prevent interactive prompts during apt operations +ENV DEBIAN_FRONTEND=noninteractive + +# Update the package list and install necessary dependencies for adding Node.js and PHP repositories +# curl is needed to download the NodeSource setup script, Bun install script, and Composer installer +# gnupg is needed to handle GPG keys for apt repositories +# ca-certificates is needed for secure connections +# apt-transport-https is needed for apt to fetch packages over HTTPS +# unzip and tar are often required for Bun's installation process +# lsb-release is needed for add-apt-repository (which is not used directly, but useful for detecting distro) +# dirmngr is needed for adding GPG keys +# wget is needed to download the PHP repository GPG key +RUN apt-get update && \ + apt-get install -y curl gnupg ca-certificates apt-transport-https unzip tar lsb-release dirmngr wget && \ + rm -rf /var/lib/apt/lists/* + +# Add NodeSource GPG key for Node.js 23.x repository +# The NodeSource setup script adds the repository and imports the GPG key. +# We're specifically targeting Node.js 23.x. +RUN curl -fsSL https://deb.nodesource.com/setup_23.x | bash - + +# Install Node.js and npm from the NodeSource repository +# nodejs package includes both Node.js runtime and npm (Node Package Manager) +RUN apt-get update && \ + apt-get install -y nodejs && \ + rm -rf /var/lib/apt/lists/* + +# Install Bun +# This command downloads and executes the official Bun installation script. +# It installs Bun globally. +RUN curl -fsSL https://bun.sh/install | bash + +# Add Bun to the PATH for non-interactive shells and subsequent commands +# The Bun installer typically adds it to ~/.bashrc or similar, but for Docker, +# we need to ensure it's in the system-wide PATH or explicitly sourced. +# This line appends the Bun binary directory to the PATH environment variable. +ENV PATH="/root/.bun/bin:$PATH" + +# Add Ondrej's PHP repository for Debian 12 (Bookworm) +# This repository provides up-to-date PHP versions. +RUN echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/sury-php.list && \ + wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add - + +# Install PHP 8.3 and common extensions +# php8.3-cli: Command Line Interface +# php8.3-fpm: FastCGI Process Manager (for web servers like Nginx/Apache) +# php8.3-mysql: MySQL database extension +# php8.3-curl: cURL extension for making HTTP requests +# php8.3-mbstring: Multibyte string functions +# php8.3-xml: XML extension +# php8.3-zip: Zip archive extension (already present, but good to ensure) +# php8.3-gd: GD extension (for JPEG, WebP, etc.) +# php8.3-pdo: PDO (PHP Data Objects) extension +# php8.3-pgsql: PostgreSQL PDO driver +# php8.3-gmp: GNU Multiple Precision arithmetic functions +# php8.3-bcmath: Arbitrary precision mathematics +# php8.3-intl: Internationalization extension +# php8.3-redis: Redis extension +# php8.3-excimer: Excimer extension (for profiling) +# php8.3-xdebug: Xdebug extension (for debugging and profiling) +RUN apt-get update && \ + apt-get install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-pdo php8.3-pgsql php8.3-gmp php8.3-bcmath php8.3-intl php8.3-redis php8.3-excimer php8.3-xdebug && \ + rm -rf /var/lib/apt/lists/* + +# Install Composer +# Download the Composer installer script +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Configure Xdebug +# Create a new INI file for Xdebug configuration. +# Set xdebug.mode to 'develop,debug' for development and debugging features. +# Set xdebug.start_with_request to 'yes' to always start Xdebug on every request. +# Set xdebug.client_host to 'host.docker.internal' for Docker Desktop compatibility +# This allows Xdebug to connect back to the host machine's IDE. +RUN echo "zend_extension=xdebug" > /etc/php/8.3/mods-available/xdebug.ini && \ + echo "xdebug.mode=develop,debug" >> /etc/php/8.3/mods-available/xdebug.ini && \ + echo "xdebug.start_with_request=yes" >> /etc/php/8.3/mods-available/xdebug.ini && \ + echo "xdebug.client_host=host.docker.internal" >> /etc/php/8.3/mods-available/xdebug.ini + +# --- Install Docker into the image --- +# Add Docker's official GPG key +RUN install -m 0755 -d /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \ + chmod a+r /etc/apt/keyrings/docker.gpg + +# Add the Docker repository to Apt sources +RUN echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null + +# Update apt package index and install Docker Engine, CLI, containerd, and Docker Compose plugin +RUN apt-get update && \ + apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin && \ + rm -rf /var/lib/apt/lists/* + +# Verify Node.js, npm, Bun, PHP, Composer, and Docker installations +RUN node -v +RUN npm -v +RUN bun -v +RUN php -v +RUN composer -v + +# Set a working directory (optional, but good practice for applications) +WORKDIR /app + +# You can add your application code here, for example: +# COPY . /app + +# Install dependencies using Bun +# This command assumes you have a package.json or bun.lockb file in your /app directory. +# If you don't have one, this command will likely fail or do nothing. +# RUN bun install + +# EXPOSE 3000 +# CMD ["node", "your-app.js"] + +# Default command if no other command is specified when running the container +# This will keep the container running and allow you to exec into it. +CMD ["node"]