From df57a68d8fab04dd5ca4f07e4675a70e1ab99a5c Mon Sep 17 00:00:00 2001 From: Hannes Giesenow Date: Tue, 5 Dec 2023 12:11:54 +0100 Subject: [PATCH] Added docker build to github workflow --- .github/workflows/docker-main.yml | 42 ++++++++++++++++++++++++++++ .github/workflows/docker-release.yml | 41 +++++++++++++++++++++++++++ .gitignore | 1 + README.md | 10 +++++++ docker/Dockerfile | 14 ++++++++++ 5 files changed, 108 insertions(+) create mode 100644 .github/workflows/docker-main.yml create mode 100644 .github/workflows/docker-release.yml create mode 100644 docker/Dockerfile diff --git a/.github/workflows/docker-main.yml b/.github/workflows/docker-main.yml new file mode 100644 index 00000000000..598a6ae6ceb --- /dev/null +++ b/.github/workflows/docker-main.yml @@ -0,0 +1,42 @@ +name: Create and publish a Docker image + +on: + push: + branches: [main,'docker-setup'] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ ,,env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 + with: + context: . + file: docker/Dockerfile + push: true + tags: ${{ env.REGISTRY }}/${{ ,,env.IMAGE_NAME }}:latest + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/docker-release.yml b/.github/workflows/docker-release.yml new file mode 100644 index 00000000000..7421ea1df42 --- /dev/null +++ b/.github/workflows/docker-release.yml @@ -0,0 +1,41 @@ +name: Create and publish a Docker image + +on: + - "release" + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Log in to the Container registry + uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 + with: + context: . + file: docker/Dockerfile + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index a45dc70858d..fc9f8e04e4c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/.idea /.env /.php-cs-fixer.php /.phpunit.result.cache diff --git a/README.md b/README.md index 8ad8cf35b9b..680859848c0 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,16 @@ projects. This tool does not only detect them, but also fixes them for you. ## Documentation +### Run with docker +You can take a ready built docker image to run ``php-cs-fixer``. +```console +docker run ghcr.io/elbformat/PHP-CS-Fixer/PHP-CS-Fixer:latest fix src +``` +To use a custom config, just map it into the container +```console +docker run -v $(pwd)/.php-cs-fixer.dist.php:/var/www/.php-cs-fixer.php ghcr.io/PHP-CS-Fixer/PHP-CS-Fixer:latest fix src +``` + ### Installation The recommended way to install PHP CS Fixer is to use [Composer](https://getcomposer.org/download/) diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000000..254aa15242e --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,14 @@ +# Install composer dependencies first +FROM php:8.2-alpine as vendor +WORKDIR /var/www +COPY --from=composer/composer:2-bin /composer /usr/local/bin/composer +COPY composer.json /var/www/composer.json +RUN composer install --prefer-dist --no-dev --optimize-autoloader --no-scripts + +FROM php:8.2-alpine +WORKDIR /var/www +COPY src /var/www/src +COPY php-cs-fixer /var/www/php-cs-fixer +# Only take the dependencies (not composer itself) into the container +COPY --from=vendor /var/www/vendor /var/www/vendor +ENTRYPOINT ["/var/www/php-cs-fixer"]