diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 473b5f1..05c867f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,16 +5,16 @@ on: [push, pull_request] jobs: test: name: Test - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v4 - name: Install OTP and Elixir uses: erlef/setup-beam@v1 with: - otp-version: 27.1.2 - elixir-version: 1.17.3 + otp-version: 27.2 + elixir-version: 1.18.1 - name: Install dependencies run: | @@ -30,3 +30,54 @@ jobs: - name: Run tests run: | mix test --include typesense + + docker: + name: Docker + runs-on: ubuntu-24.04 + + permissions: + contents: 'read' + id-token: 'write' + + env: + IMAGE_NAME: 'hexdocs' + PROJECT_ID: 'hexpm-prod' + SERVICE_ACCOUNT: ${{ secrets.GCLOUD_SERVICE_ACCOUNT }} + WORKLOAD_IDENTITY_PROVIDER: ${{ secrets.GCLOUD_WORKFLOW_IDENTITY_POOL_PROVIDER }} + + steps: + - uses: actions/checkout@v4 + + - name: Set short git commit SHA + id: vars + run: | + calculatedSha=$(git rev-parse --short ${{ github.sha }}) + echo "COMMIT_SHORT_SHA=$calculatedSha" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Google auth + id: auth + uses: 'google-github-actions/auth@v2' + with: + token_format: 'access_token' + project_id: ${{ env.PROJECT_ID }} + service_account: ${{ env.SERVICE_ACCOUNT }} + workload_identity_provider: ${{ env.WORKLOAD_IDENTITY_PROVIDER }} + + - name: Docker Auth + id: docker-auth + uses: 'docker/login-action@v3' + with: + registry: gcr.io + username: 'oauth2accesstoken' + password: '${{ steps.auth.outputs.access_token }}' + + - name: Build and push + uses: docker/build-push-action@v6 + with: + tags: gcr.io/${{ env.PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.COMMIT_SHORT_SHA }} + push: ${{ github.event_name != 'pull_request' }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/Dockerfile b/Dockerfile index 2b8abbb..7aa220b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ -ARG ELIXIR_VERSION=1.17.3 +ARG ELIXIR_VERSION=1.18.1 ARG ERLANG_VERSION=27.2 -ARG DEBIAN_VERSION=bookworm-20241202-slim +ARG DEBIAN_VERSION=bookworm-20241223-slim FROM hexpm/elixir:${ELIXIR_VERSION}-erlang-${ERLANG_VERSION}-debian-${DEBIAN_VERSION} AS build diff --git a/cloudbuild.yaml b/cloudbuild.yaml deleted file mode 100644 index 74dafa3..0000000 --- a/cloudbuild.yaml +++ /dev/null @@ -1,48 +0,0 @@ -steps: -- name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/$PROJECT_ID/hexdocs-build:latest'] - id: pull-build - waitFor: ['-'] -- name: 'gcr.io/cloud-builders/docker' - args: ['pull', 'gcr.io/$PROJECT_ID/hexdocs:latest'] - id: pull-app - waitFor: ['-'] -- name: 'gcr.io/cloud-builders/docker' - args: - - 'build' - - '-t' - - 'gcr.io/$PROJECT_ID/hexdocs-build:latest' - - '-t' - - 'gcr.io/$PROJECT_ID/hexdocs-build:$SHORT_SHA' - - '--cache-from' - - 'gcr.io/$PROJECT_ID/hexdocs-build:latest' - - '--target' - - 'build' - - '.' - id: build-build - waitFor: ['pull-build'] -- name: 'gcr.io/cloud-builders/docker' - args: - - 'build' - - '-t' - - 'gcr.io/$PROJECT_ID/hexdocs:latest' - - '-t' - - 'gcr.io/$PROJECT_ID/hexdocs:$SHORT_SHA' - - '--cache-from' - - 'gcr.io/$PROJECT_ID/hexdocs-build:latest' - - '--cache-from' - - 'gcr.io/$PROJECT_ID/hexdocs:latest' - - '--target' - - 'app' - - '.' - id: build-app - waitFor: ['build-build', 'pull-app'] - -images: -- 'gcr.io/$PROJECT_ID/hexdocs-build:latest' -- 'gcr.io/$PROJECT_ID/hexdocs:latest' -- 'gcr.io/$PROJECT_ID/hexdocs-build:$SHORT_SHA' -- 'gcr.io/$PROJECT_ID/hexdocs:$SHORT_SHA' - -options: - machineType: 'N1_HIGHCPU_8' diff --git a/mix.exs b/mix.exs index 3f06a34..795de28 100644 --- a/mix.exs +++ b/mix.exs @@ -5,7 +5,7 @@ defmodule Hexdocs.MixProject do [ app: :hexdocs, version: "0.1.0", - elixir: "~> 1.17", + elixir: "~> 1.18", start_permanent: Mix.env() == :prod, releases: releases(), deps: deps()