mirror of
https://codeberg.org/JasterV/spazio-solazzo.git
synced 2026-04-26 18:20:03 +00:00
feat: migrate to codeberg
This commit is contained in:
parent
7caddd5d35
commit
cdf5dab858
7 changed files with 118 additions and 254 deletions
93
.github/workflows/ci.yml
vendored
93
.github/workflows/ci.yml
vendored
|
|
@ -1,93 +0,0 @@
|
|||
name: CI
|
||||
|
||||
on:
|
||||
workflow_dispatch: {}
|
||||
workflow_call:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
env:
|
||||
MIX_ENV: test
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
# Service containers to run with `container-job`
|
||||
services:
|
||||
# Label used to access the service container
|
||||
postgres:
|
||||
# Docker Hub image
|
||||
image: postgres
|
||||
# Provide the password for postgres
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
# Set health checks to wait until postgres has started
|
||||
options: >-
|
||||
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
|
||||
ports:
|
||||
- 5432:5432
|
||||
|
||||
name: Run CI on OTP ${{matrix.otp}} / Elixir ${{matrix.elixir}}
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
otp: ["27.3"]
|
||||
elixir: ["1.18.3"]
|
||||
|
||||
steps:
|
||||
- name: Set up Elixir
|
||||
uses: erlef/setup-beam@v1
|
||||
with:
|
||||
elixir-version: ${{matrix.elixir}}
|
||||
otp-version: ${{matrix.otp}}
|
||||
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v5
|
||||
|
||||
# Step: Define how to cache deps. Restores existing cache if present.
|
||||
- name: Cache deps
|
||||
id: cache-deps
|
||||
uses: actions/cache@v4
|
||||
env:
|
||||
cache-name: cache-spazio-solazzo-deps
|
||||
with:
|
||||
path: spazio-solazzo/deps
|
||||
key: ${{ runner.os }}-${{matrix.otp}}-${{matrix.elixir}}-${{ env.cache-name }}-${{ hashFiles('spazio-solazzo/**/mix.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{matrix.otp}}-${{matrix.elixir}}-${{ env.cache-name }}-
|
||||
|
||||
# Step: Define how to cache the `_build` directory. After the first run,
|
||||
# this speeds up tests runs a lot. This includes not re-compiling our
|
||||
# project's downloaded deps every run.
|
||||
- name: Cache compiled build
|
||||
id: cache-build
|
||||
uses: actions/cache@v4
|
||||
env:
|
||||
cache-name: cache-spazio-solazzo-compiled-build
|
||||
with:
|
||||
path: spazio-solazzo/_build
|
||||
key: ${{ runner.os }}-${{matrix.otp}}-${{matrix.elixir}}-${{ env.cache-name }}-${{ hashFiles('spazio-solazzo/**/mix.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-${{matrix.otp}}-${{matrix.elixir}}-${{ env.cache-name }}
|
||||
${{ runner.os }}-${{matrix.otp}}-${{matrix.elixir}}-
|
||||
|
||||
- name: Install dependencies
|
||||
run: mix deps.get
|
||||
|
||||
# Step: Compile the project treating any warnings as errors.
|
||||
- name: Compiles without warnings
|
||||
run: mix compile --warnings-as-errors
|
||||
|
||||
# Step: Check that the checked in code has already been formatted.
|
||||
# This step fails if something was found unformatted.
|
||||
- name: Check Formatting
|
||||
run: mix format --check-formatted
|
||||
|
||||
# Step: Execute Credo
|
||||
- name: Run Credo
|
||||
run: mix credo
|
||||
|
||||
# Step: Execute the tests.
|
||||
- name: Run tests
|
||||
run: mix test
|
||||
64
.github/workflows/production.yml
vendored
64
.github/workflows/production.yml
vendored
|
|
@ -1,64 +0,0 @@
|
|||
# See https://fly.io/docs/app-guides/continuous-deployment-with-github-actions/
|
||||
|
||||
name: Production CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
env:
|
||||
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
|
||||
IMAGE_TAG: registry.fly.io/spazio-solazzo:sha-${{ github.sha }}
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
uses: ./.github/workflows/ci.yml
|
||||
secrets: inherit
|
||||
|
||||
deploy:
|
||||
name: Deploy app
|
||||
needs: ci
|
||||
runs-on: ubuntu-latest
|
||||
concurrency: deploy-group
|
||||
|
||||
environment:
|
||||
name: production
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- uses: superfly/flyctl-actions/setup-flyctl@master
|
||||
|
||||
- name: Authenticate with Fly registry
|
||||
run: flyctl auth docker
|
||||
|
||||
- name: Build and push Docker image (GHA cache)
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
context: .
|
||||
tags: ${{ env.IMAGE_TAG }}
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Set Fly secrets
|
||||
run: |
|
||||
flyctl secrets --access-token "$FLY_API_TOKEN" set \
|
||||
TOKEN_SIGNING_SECRET="$TOKEN_SIGNING_SECRET" \
|
||||
ADMIN_EMAIL="$ADMIN_EMAIL" \
|
||||
SPAZIO_SOLAZZO_EMAIL="$SPAZIO_SOLAZZO_EMAIL" \
|
||||
FRONT_OFFICE_PHONE_NUMBER="$FRONT_OFFICE_PHONE_NUMBER" \
|
||||
RESEND_API_KEY="$RESEND_API_KEY" \
|
||||
DATABASE_URL="$DATABASE_URL"
|
||||
env:
|
||||
TOKEN_SIGNING_SECRET: ${{ secrets.TOKEN_SIGNING_SECRET }}
|
||||
ADMIN_EMAIL: ${{ secrets.ADMIN_EMAIL }}
|
||||
SPAZIO_SOLAZZO_EMAIL: ${{ secrets.SPAZIO_SOLAZZO_EMAIL }}
|
||||
FRONT_OFFICE_PHONE_NUMBER: ${{ secrets.FRONT_OFFICE_PHONE_NUMBER }}
|
||||
RESEND_API_KEY: ${{ secrets.RESEND_API_KEY }}
|
||||
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
||||
|
||||
- run: flyctl deploy --image ${{ env.IMAGE_TAG }}
|
||||
25
.github/workflows/review-cleanup.yml
vendored
25
.github/workflows/review-cleanup.yml
vendored
|
|
@ -1,25 +0,0 @@
|
|||
name: Cleanup Review App
|
||||
on:
|
||||
pull_request:
|
||||
types: [closed]
|
||||
|
||||
env:
|
||||
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
|
||||
APP_NAME: pr-${{ github.event.pull_request.number }}-jasterv-spazio-solazzo
|
||||
|
||||
jobs:
|
||||
review_app_cleanup:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
concurrency:
|
||||
group: pr-${{ github.event.number }}
|
||||
|
||||
environment:
|
||||
name: review
|
||||
|
||||
steps:
|
||||
- name: Destroy PR app
|
||||
uses: superfly/fly-pr-review-apps@1.5.0
|
||||
with:
|
||||
name: ${{ env.APP_NAME }}
|
||||
config: fly.review.toml
|
||||
72
.github/workflows/review.yml
vendored
72
.github/workflows/review.yml
vendored
|
|
@ -1,72 +0,0 @@
|
|||
name: Deploy Review App
|
||||
on:
|
||||
# Run this workflow on every PR event. Existing review apps will be updated when the PR is updated.
|
||||
pull_request:
|
||||
types: [opened, reopened, synchronize]
|
||||
|
||||
env:
|
||||
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
|
||||
FLY_REGION: ams
|
||||
FLY_ORG: personal
|
||||
APP_NAME: pr-${{ github.event.pull_request.number }}-jasterv-spazio-solazzo
|
||||
|
||||
jobs:
|
||||
ci:
|
||||
uses: ./.github/workflows/ci.yml
|
||||
secrets: inherit
|
||||
|
||||
build_and_deploy:
|
||||
runs-on: ubuntu-latest
|
||||
needs: ci
|
||||
|
||||
outputs:
|
||||
url: ${{ steps.deploy.outputs.url }}
|
||||
# Only run one deployment at a time per PR.
|
||||
concurrency:
|
||||
group: pr-${{ github.event.number }}
|
||||
|
||||
environment:
|
||||
name: review
|
||||
url: ${{ steps.deploy.outputs.url }}
|
||||
|
||||
steps:
|
||||
- name: Get code
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Install flyctl CLI
|
||||
uses: superfly/flyctl-actions/setup-flyctl@master
|
||||
|
||||
- name: Authenticate with Fly.io registry
|
||||
run: flyctl auth docker
|
||||
|
||||
- name: Create Fly App before pushing docker image to registry
|
||||
run: |
|
||||
flyctl apps create ${{ env.APP_NAME }} --org ${{ env.FLY_ORG }} || true
|
||||
|
||||
- name: Build and push Docker image
|
||||
uses: docker/build-push-action@v6
|
||||
with:
|
||||
push: true
|
||||
tags: registry.fly.io/${{ env.APP_NAME }}:sha-${{ github.sha }}
|
||||
context: .
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
- name: Deploy PR app to Fly.io
|
||||
id: deploy
|
||||
uses: superfly/fly-pr-review-apps@1.5.0
|
||||
with:
|
||||
name: ${{ env.APP_NAME }}
|
||||
config: fly.review.toml
|
||||
secrets: |
|
||||
TOKEN_SIGNING_SECRET=${{ secrets.TOKEN_SIGNING_SECRET }}
|
||||
ADMIN_EMAIL=${{ secrets.ADMIN_EMAIL }}
|
||||
SPAZIO_SOLAZZO_EMAIL=${{ secrets.SPAZIO_SOLAZZO_EMAIL }}
|
||||
FRONT_OFFICE_PHONE_NUMBER=${{ secrets.FRONT_OFFICE_PHONE_NUMBER }}
|
||||
RESEND_API_KEY=${{ secrets.RESEND_API_KEY }}
|
||||
DATABASE_URL=${{ secrets.DATABASE_URL }}
|
||||
SECRET_KEY_BASE=${{ secrets.SECRET_KEY_BASE }}
|
||||
PHX_HOST=${{ env.APP_NAME }}.fly.dev
|
||||
21
.woodpecker/ci.yml
Normal file
21
.woodpecker/ci.yml
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
when:
|
||||
event: [push, pull_request]
|
||||
branch: main
|
||||
|
||||
steps:
|
||||
ci:
|
||||
image: elixir:1.18.3-otp-27
|
||||
commands:
|
||||
- mix deps.get
|
||||
- mix compile --warnings-as-errors
|
||||
- mix format --check-formatted
|
||||
- mix credo
|
||||
- mix test
|
||||
environment:
|
||||
MIX_ENV: ci
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15-alpine
|
||||
environment:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
45
.woodpecker/production.yml
Normal file
45
.woodpecker/production.yml
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
# This ensures the pipeline only runs on the main branch
|
||||
when:
|
||||
event: push
|
||||
branch: main
|
||||
|
||||
depends_on:
|
||||
- ci
|
||||
|
||||
steps:
|
||||
# Build and Push Docker Image
|
||||
# We use the 'kaniko' plugin to build images without needing a Docker daemon (safer/simpler)
|
||||
build:
|
||||
image: plugins/kaniko
|
||||
settings:
|
||||
registry: registry.fly.io
|
||||
repo: registry.fly.io/spazio-solazzo
|
||||
tags: sha-${CI_COMMIT_SHA}
|
||||
# You'll need to provide Fly credentials to Kaniko
|
||||
username: x
|
||||
password:
|
||||
from_secret: FLY_API_TOKEN
|
||||
|
||||
# 3. Set Secrets and Deploy
|
||||
deploy:
|
||||
image: superfly/flyctl:latest
|
||||
environment:
|
||||
FLY_API_TOKEN:
|
||||
from_secret: FLY_API_TOKEN
|
||||
# Passing the other app secrets
|
||||
TOKEN_SIGNING_SECRET: { from_secret: TOKEN_SIGNING_SECRET }
|
||||
ADMIN_EMAIL: { from_secret: ADMIN_EMAIL }
|
||||
SPAZIO_SOLAZZO_EMAIL: { from_secret: SPAZIO_SOLAZZO_EMAIL }
|
||||
FRONT_OFFICE_PHONE_NUMBER: { from_secret: FRONT_OFFICE_PHONE_NUMBER }
|
||||
RESEND_API_KEY: { from_secret: RESEND_API_KEY }
|
||||
DATABASE_URL: { from_secret: DATABASE_URL }
|
||||
commands:
|
||||
- |
|
||||
flyctl secrets set \
|
||||
TOKEN_SIGNING_SECRET="$TOKEN_SIGNING_SECRET" \
|
||||
ADMIN_EMAIL="$ADMIN_EMAIL" \
|
||||
SPAZIO_SOLAZZO_EMAIL="$SPAZIO_SOLAZZO_EMAIL" \
|
||||
FRONT_OFFICE_PHONE_NUMBER="$FRONT_OFFICE_PHONE_NUMBER" \
|
||||
RESEND_API_KEY="$RESEND_API_KEY" \
|
||||
DATABASE_URL="$DATABASE_URL"
|
||||
- flyctl deploy --image registry.fly.io/spazio-solazzo:sha-${CI_COMMIT_SHA}
|
||||
52
config/ci.exs
Normal file
52
config/ci.exs
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import Config
|
||||
config :spazio_solazzo, Oban, testing: :manual
|
||||
config :bcrypt_elixir, log_rounds: 1
|
||||
config :ash, policies: [show_policy_breakdowns?: true], disable_async?: true
|
||||
|
||||
config :spazio_solazzo,
|
||||
token_signing_secret: "RfyHb7pU2R0WQY7TqdzLabS9LPPQosSq",
|
||||
admin_email: "admin@myapp.com",
|
||||
spazio_solazzo_email: "noreply@spaziosolazzo.com",
|
||||
booking_token_signing_secret:
|
||||
"43vbAIUx9+XswjhBrQ3uk2bapAYmu1WRR/h/zlFDxNd/CAfBypQXcvLv2bbR7TSf",
|
||||
front_office_phone_number: "+39 36485928"
|
||||
|
||||
# Configure your database
|
||||
#
|
||||
# The MIX_TEST_PARTITION environment variable can be used
|
||||
# to provide built-in test partitioning in CI environment.
|
||||
# Run `mix help test` for more information.
|
||||
config :spazio_solazzo, SpazioSolazzo.Repo,
|
||||
username: "postgres",
|
||||
password: "postgres",
|
||||
hostname: "postgres",
|
||||
database: "spazio_solazzo_test#{System.get_env("MIX_TEST_PARTITION")}",
|
||||
pool: Ecto.Adapters.SQL.Sandbox,
|
||||
pool_size: System.schedulers_online() * 2
|
||||
|
||||
# We don't run a server during test. If one is required,
|
||||
# you can enable the server option below.
|
||||
config :spazio_solazzo, SpazioSolazzoWeb.Endpoint,
|
||||
http: [ip: {127, 0, 0, 1}, port: 4002],
|
||||
secret_key_base: "qQdHaG3c/trjbfcoDF57u1wf+1pGzb82rxEhqKAzvHyaB4Z2U19MJivy7+wL756P",
|
||||
server: false
|
||||
|
||||
# In test we don't send emails
|
||||
config :spazio_solazzo, SpazioSolazzo.Mailer, adapter: Swoosh.Adapters.Local
|
||||
|
||||
# Disable swoosh api client as it is only required for production adapters
|
||||
config :swoosh, :api_client, false
|
||||
|
||||
# Print only warnings and errors during test
|
||||
config :logger, level: :warning
|
||||
|
||||
# Initialize plugs at runtime for faster test compilation
|
||||
config :phoenix, :plug_init_mode, :runtime
|
||||
|
||||
# Enable helpful, but potentially expensive runtime checks
|
||||
config :phoenix_live_view,
|
||||
enable_expensive_runtime_checks: true
|
||||
|
||||
# Sort query params output of verified routes for robust url comparisons
|
||||
config :phoenix,
|
||||
sort_verified_routes_query_params: true
|
||||
Loading…
Reference in a new issue