diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..3eddd09 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: 'github-actions' + directory: '/' + schedule: + interval: 'daily' diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml new file mode 100644 index 0000000..33585ce --- /dev/null +++ b/.github/workflows/push.yml @@ -0,0 +1,174 @@ +on: [push] +name: Deploy workflow +concurrency: + group: build-${{ github.ref }} + cancel-in-progress: true +jobs: + install: + runs-on: ubuntu-latest + permissions: + contents: write + # https://github.com/actions/deploy-pages + pages: write + id-token: write + strategy: + matrix: + node-version: [16.x] + + steps: + - uses: actions/checkout@v3 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + + - name: Cache pnpm modules + uses: actions/cache@v3 + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}- + + - uses: pnpm/action-setup@v2.2.4 + with: + version: 7 + run_install: true + + - name: Lint + run: pnpm lint + - name: Set git commit sha + id: revparse + run: | + echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + - name: Build + run: pnpm build + + - name: Create Release + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: true + prerelease: false + - name: Create Tar Ball + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') + run: tar cJf yacd.tar.xz public + - name: Upload Release Asset + if: github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/') + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./yacd.tar.xz + asset_name: yacd.tar.xz + asset_content_type: application/x-gzip + + - name: Push to gh-pages + if: github.event_name == 'push' && (startsWith(github.event.ref, 'refs/tags/') || github.event.ref == 'refs/heads/publish') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PUBLISH_DIR: public + BRANCH: gh-pages + run: | + cd $PUBLISH_DIR + ls -l + git init + git config user.name "${GITHUB_ACTOR}" + git config user.email "${GITHUB_ACTOR}@noreply.github.com" + touch .nojekyll + git add . + git status + git commit -m "Push to gh-pages" + git push -f https://$GITHUB_ACTOR:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git HEAD:$BRANCH + + - name: Send Notification + uses: haishanh/actions-telegram-notification@v1 + if: ${{ always() }} + with: + notification-token: ${{ secrets.TG_NOTIFICATION_TOKEN }} + job-status: ${{ job.status }} + + docker: + needs: install + runs-on: ubuntu-latest + if: github.event_name == 'push' && (startsWith(github.event.ref, 'refs/tags/') || startsWith(github.event.ref, 'refs/heads/v0.') || github.event.ref == 'refs/heads/master' || github.event.ref == 'refs/heads/test') + steps: + - uses: actions/checkout@v3 + - name: Set git commit sha + id: revparse + run: | + echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + + - name: Cache Docker layers + uses: actions/cache@v3 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + + - name: Docker meta + id: docker_meta + uses: docker/metadata-action@v4 + with: + images: haishanh/yacd + + # - name: Set up QEMU + # uses: docker/setup-qemu-action@v1.2.0 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + version: latest + + - name: Builder instance name + run: echo ${{ steps.buildx.outputs.name }} + - name: Available platforms + run: echo ${{ steps.buildx.outputs.platforms }} + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ github.actor }} + password: ${{ secrets.DOCKER_HUB_PASSWORD }} + + - name: Login to GHCR + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v3 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm/v7,linux/arm64 + push: true + tags: ${{ steps.docker_meta.outputs.tags }},ghcr.io/${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha + build-args: | + COMMIT_HASH=${{ env.COMMIT_HASH }} + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} + + - name: Send Notification + uses: haishanh/actions-telegram-notification@v1 + if: ${{ always() }} + with: + notification-token: ${{ secrets.TG_NOTIFICATION_TOKEN }} + job-status: ${{ job.status }}