add configuration struct and more configuration options #100
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI/CD | |
on: push | |
jobs: | |
misspell: | |
name: runner / misspell | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: misspell | |
uses: reviewdog/action-misspell@v1 | |
with: | |
github_token: ${{ secrets.github_token }} | |
locale: 'US' | |
exclude: | | |
./.git/* | |
./.vendor/* | |
hadolint: | |
name: runner / hadolint | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: hadolint/[email protected] | |
with: | |
dockerfile: Dockerfile | |
gosec: | |
name: runner / gocheck | |
runs-on: ubuntu-latest | |
env: | |
GO111MODULE: on | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Run Gosec Security Scanner | |
uses: securego/gosec@master | |
with: | |
args: -severity medium ./... | |
prettier: | |
name: runner / prettier | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up npm | |
uses: actions/setup-node@v3 | |
- name: Install dependencies | |
working-directory: ./ui | |
run: npm install | |
- name: Prettify code | |
working-directory: ./ui | |
run: npm run prettier | |
test-build: | |
name: runner / Go package | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.21' | |
- name: Install Dependencies | |
run: | | |
sudo apt-get install -y libwebp-dev | |
go install honnef.co/go/tools/cmd/staticcheck@latest | |
- name: build | |
run: go build cmd/*go | |
- name: staticcheck | |
run: | | |
go install honnef.co/go/tools/cmd/staticcheck@latest | |
staticcheck ./... | |
build-push-songstitch: | |
name: runner / Build and Push SongStitch Image | |
runs-on: ubuntu-latest | |
permissions: | |
contents: read | |
packages: write | |
id-token: write | |
env: | |
IMAGE_NAME: song-stitch | |
IMAGE_REGISTRY: ghcr.io | |
IMAGE_REPOSITORY: songstitch | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Docker meta | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ${{env.IMAGE_REGISTRY}}/${{env.IMAGE_REPOSITORY}}/${{env.IMAGE_NAME}} | |
tags: | | |
type=sha | |
type=ref,event=branch | |
type=ref,event=pr | |
type=semver,pattern={{version}} | |
type=semver,pattern={{major}}.{{minor}} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.IMAGE_REGISTRY }} | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Build and push | |
uses: docker/build-push-action@v3 | |
with: | |
context: . | |
push: true | |
platforms: linux/amd64 # only build X86 for now since arm emulation is slow | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} | |
deploy: | |
name: runner / Deploy app | |
runs-on: ubuntu-latest | |
needs: build-push-songstitch | |
if: github.ref == 'refs/heads/main' | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: superfly/flyctl-actions/setup-flyctl@master | |
- run: flyctl deploy --image ghcr.io/songstitch/song-stitch:sha-${GITHUB_SHA::7} | |
env: | |
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} | |
- name: Purge cache | |
uses: nathanvaughn/actions-cloudflare-purge@master | |
with: | |
cf_zone: ${{ secrets.CLOUDFLARE_ZONE }} | |
cf_auth: ${{ secrets.CLOUDFLARE_TOKEN }} | |
test: | |
name: runner / Smoke Test | |
runs-on: ubuntu-latest | |
needs: deploy | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: '1.21' | |
- name: Run Tests | |
run: make test |