name: 'Build and Release Docker Image' author: 'Neshura' on: push: tags: - '[0-9]+.[0-9]+.[0-9]+' - '[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+' jobs: test: runs-on: docker steps: - name: Checking Out Repository Code uses: https://code.forgejo.org/actions/checkout@v3 - name: Get Yarn Cache Directory id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Set Up Yarn Cache uses: actions/cache@v3 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Install Dependencies run: yarn install - name: Install Chromium for Unlighthouse run: | echo "apt update && apt install -y chromium" apt update && apt install -y chromium echo 'export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --no-sandbox" >> /etc/chromium.d/default-flags' echo 'export CHROMIUM_FLAGS="$CHROMIUM_FLAGS --no-sandbox"' >> /etc/chromium.d/default-flags - name: Add Unlighthouse run: | echo "yarn global add @unlighthouse/cli" yarn global add @unlighthouse/cli - name: Run Linter run: yarn lint - name: Check if Version in package.json matches Tag run: | VERSION=$(cat package.json | grep "version" | sed 's/.*://' | tr -d , | tr -d \" | tr -d " " ) if test $VERSION != "${{ github.ref_name }}"; then echo "Expected Version is: '${{ github.ref_name }}' actual Version is: '$VERSION'"; exit 1 else echo "Version is: '$VERSION'"; fi - name: Build Site run: yarn build - name: Start Server run: | export KUMA_USERNAME=${{ secrets.KUMA_USERNAME }} export KUMA_PASSWORD=${{ secrets.KUMA_PASSWORD }} yarn preview & - name: Run Unlighthouse for Desktop run: unlighthouse-ci --build-static --desktop --outputPath reports/desktop - name: Refresh Server run: | if ! pgrep -f "node /usr/bin/yarn" ; then export KUMA_USERNAME=${{ secrets.KUMA_USERNAME }} export KUMA_PASSWORD=${{ secrets.KUMA_PASSWORD }} yarn preview & fi - name: Run Unlighthouse for Mobile run: unlighthouse-ci --build-static --mobile --outputPath reports/mobile - name: Uploading Lighthouse Reports uses: actions/upload-artifact@v3 with: name: lighthouse path: reports if-no-files-found: error build: needs: test if: success() runs-on: dind steps: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: config-inline: | [registry."docker.io"] mirrors = ["https://docker-cache.neshweb.net"] - name: Login to Docker Hub uses: docker/login-action@v3 with: registry: forgejo.neshweb.net username: ${{ secrets.FORGEJO_USERNAME }} password: ${{ secrets.FORGEJO_TOKEN }} - name: Determine Docker tags id: tags run: | if echo ${{ github.ref_name }} | grep -qi '\-rc' ; then echo latest=forgejo.neshweb.net/neshweb-sites/${{ github.event.repository.name }}:preview >> $GITHUB_OUTPUT; else echo latest=forgejo.neshweb.net/neshweb-sites/${{ github.event.repository.name }}:latest >> $GITHUB_OUTPUT; fi echo version=forgejo.neshweb.net/neshweb-sites/${{ github.event.repository.name }}:${{ github.ref_name }} >> $GITHUB_OUTPUT; - name: Push to Package Registry uses: docker/build-push-action@v5 with: push: true tags: ${{ steps.tags.outputs.version }}, ${{ steps.tags.outputs.latest }} release: needs: build if: success() runs-on: docker steps: - name: Release New Version uses: actions/forgejo-release@v1 with: direction: upload url: https://forgejo.neshweb.net release-dir: release token: ${{ secrets.FORGEJO_TOKEN }} tag: ${{ github.ref_name }}