on: push: branches: - main - develop tags: - '*' pull_request: paths: - '.github/workflows/build-private.yml' - 'docker/prod/**' workflow_dispatch: permissions: contents: read name: Build - Private jobs: build: runs-on: ubuntu-latest timeout-minutes: 20 steps: - name: "Check out code" uses: actions/checkout@v6 with: fetch-depth: 0 # Required for WyriHaximus/github-action-get-previous-tag - name: "Get build" id: build run: echo "build=$(git rev-parse --short=8 HEAD)" >> "$GITHUB_OUTPUT" - name: "Get Previous tag (normal push)" id: previoustag if: ${{ !startsWith(github.ref, 'refs/tags/v') }} uses: "WyriHaximus/github-action-get-previous-tag@v1" with: prefix: "v" - name: "Get version" id: version run: | if ${{ !startsWith(github.ref, 'refs/tags/v') }}; then if ${{ startsWith(steps.previoustag.outputs.tag, 'v') }}; then version=$(echo "${{ steps.previoustag.outputs.tag }}" | cut -c 2-) echo "app_version=${version}" >> "$GITHUB_OUTPUT" else echo "ERROR: No previous tag found"; exit 1; fi else version=$(echo "${{ github.ref }}" | cut -c 12-) echo "app_version=${version}" >> "$GITHUB_OUTPUT" fi - name: "Copy .env template for production" run: | cp .env.production .env rm .env.production .env.ci .env.example - name: "Add version to .env" run: sed -i 's/APP_VERSION=0.0.0/APP_VERSION=${{ steps.version.outputs.app_version }}/g' .env - name: "Add build to .env" run: sed -i 's/APP_BUILD=0/APP_BUILD=${{ steps.build.outputs.build }}/g' .env - name: "Output .env" run: cat .env - name: "Use Node.js" uses: actions/setup-node@v6 with: node-version: '20.x' - name: "Checkout billing extension" uses: actions/checkout@v6 with: repository: solidtime-io/extension-billing path: extensions/Billing ssh-key: ${{ secrets.SSH_PRIVATE_KEY_BILLING_EXTENSION }} - name: "Install dependencies in billing extension" uses: php-actions/composer@v6 env: COMPOSER_AUTH: '{"http-basic": {"spark.laravel.com": {"username": "gregor@vostrak.at", "password": "${{ secrets.LARAVEL_SPARK_API_KEY }}"}}}' with: working_dir: "extensions/Billing" command: install only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative php_version: 8.3 - name: "Install npm dependencies in billing extension" run: cd extensions/Billing && npm ci - name: "Checkout services extension" uses: actions/checkout@v6 with: repository: solidtime-io/extension-services path: extensions/Services ssh-key: ${{ secrets.SSH_PRIVATE_KEY_SERVICES_EXTENSION }} - name: "Install composer dependencies in services extension" uses: php-actions/composer@v6 with: working_dir: "extensions/Services" command: install only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative php_version: 8.3 - name: "Install npm dependencies in services extension" run: cd extensions/Services && npm ci - name: "Checkout invoicing extension" uses: actions/checkout@v6 with: repository: solidtime-io/extension-invoicing path: extensions/Invoicing ssh-key: ${{ secrets.SSH_PRIVATE_KEY_INVOICING_EXTENSION }} - name: "Install composer dependencies in invoicing extension" uses: php-actions/composer@v6 with: working_dir: "extensions/Invoicing" command: install only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative php_version: 8.3 - name: "Install npm dependencies in invoicing extension" run: cd extensions/Invoicing && npm ci - name: "Setup PHP with PECL extension" uses: shivammathur/setup-php@v2 with: php-version: '8.3' extensions: mbstring, dom, fileinfo, pgsql - name: "Install dependencies" uses: php-actions/composer@v6 if: steps.cache-vendor.outputs.cache-hit != 'true' # Skip if cache hit with: command: install only_args: --no-dev --no-ansi --no-interaction --prefer-dist --ignore-platform-reqs --classmap-authoritative php_version: 8.3 - name: "Activate billing extension" run: php artisan module:enable Billing - name: "Activate services extension" run: php artisan module:enable Services - name: "Activate invoicing extension" run: php artisan module:enable Invoicing - name: "Install npm dependencies" run: npm ci - name: "Build" run: npm run build env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - name: "Login to GitHub Container Registry" uses: docker/login-action@v3 with: registry: rg.fr-par.scw.cloud/solidtime username: nologin password: ${{ secrets.SCALEWAY_REGISTRY_TOKEN }} - name: "Docker meta" id: "meta" uses: docker/metadata-action@v5 with: images: rg.fr-par.scw.cloud/solidtime/solidtime tags: | type=ref,event=branch type=ref,event=pr type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=sha,format=long - name: "Set up QEMU" uses: docker/setup-qemu-action@v3 - name: "Set up Docker Buildx" uses: docker/setup-buildx-action@v3 - name: "Build and push" uses: docker/build-push-action@v6 with: context: . build-args: | DOCKER_FILES_BASE_PATH=docker/prod/ file: docker/prod/Dockerfile push: true platforms: linux/amd64 tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max