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@v4 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@v4 with: name: cloudflare-workers.js path: dist/cloudflare-workers.js retention-days: 1 - uses: actions/upload-artifact@v4 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: meting # 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: .