Skip to content

Update publish.yml

Update publish.yml #1

Workflow file for this run

name: Publish
on:
push:
branches:
- "main"
tags:
- "v*"
workflow_dispatch:
inputs:
docker:
description: "Deploy to DockerHub"
required: true
type: boolean
default: false
deno:
description: "Deploy to deno"
required: true
type: boolean
default: false
jobs:
unit-test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: ['18.x', '19.x', '20.x', '21.x']
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm i
- run: npm run build:all
- run: npm test
test-docker:
runs-on: ubuntu-latest
needs: [unit-test]
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build docker image
uses: docker/build-push-action@v3
with:
load: true
push: false
tags: meting-api:latest
context: .
- name: Test Docker image
run: bash scripts/docker/test-docker.sh
env:
TAG: latest
- name: Export Docker image
run: docker save meting-api:latest | gzip -1cf > meting.tar.gz
- name: Upload Docker image
uses: actions/upload-artifact@v3
with:
name: meting.tar.gz
path: meting.tar.gz
retention-days: 1
upload-art:
needs: [test-docker]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm i
- run: npm run build:all
- uses: actions/upload-artifact@v3
with:
name: cloudflare-workers.js
path: dist/cloudflare-workers.js
retention-days: 1
- uses: actions/upload-artifact@v3
with:
name: deno.js
path: dist/deno.js
retention-days: 1
deploy-to-deno:
needs: [upload-art]
if: ${{ inputs.deno || github.event_name == 'push' }}
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
steps:
- uses: actions/download-artifact@v3
with:
name: deno.js
- name: Upload to Deno Deploy
uses: denoland/deployctl@v1
with:
project: lizc521-meting-api
entrypoint: deno.js
release-docker:
needs: [test-docker]
if: ${{ inputs.docker || github.event_name == 'push' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
images: ${{ secrets.DOCKERHUB_USERNAME }}/meting-api
- name: Push docker image
uses: docker/build-push-action@v3
with:
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/meting-api:latest
${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
context: .