name: Publish Scrypted Docker Image on: workflow_dispatch: inputs: tag: description: "The npm tag used to build the Docker image. The tag will be resolved as a specific version on npm, and that will be used to version the docker image." required: true publish_tag: description: "The versioned tag for the published Docker image. NPM will use the minor version, Docker should only specify a patch version." required: false release: types: [published] jobs: build: name: Push Docker image to Docker Hub runs-on: self-hosted # runs-on: ubuntu-latest strategy: matrix: BASE: [ # "18-jammy-full", # "18-jammy-lite", "20-jammy-full", "20-jammy-lite", ] SUPERVISOR: ["", ".s6"] steps: - name: Check out the repo uses: actions/checkout@v3 - name: NPM Package Request id: npm-request uses: fjogeleit/http-request-action@v1 with: url: 'https://registry.npmjs.org/@scrypted/server' method: 'GET' - name: Set NPM Version id: package-version run: echo "NPM_VERSION=${{ fromJson(steps.npm-request.outputs.response)['dist-tags'][ github.event.inputs.tag] }}" >> "$GITHUB_OUTPUT" - name: Set up QEMU uses: docker/setup-qemu-action@v2 - name: Set up SSH uses: MrSquaare/ssh-setup-action@v2 with: host: ${{ secrets.DOCKER_SSH_HOST_ARM64 }} private-key: ${{ secrets.DOCKER_SSH_PRIVATE_KEY }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 with: platforms: linux/arm64 append: | - endpoint: ssh://${{ secrets.DOCKER_SSH_USER }}@${{ secrets.DOCKER_SSH_HOST_ARM64 }} platforms: linux/arm64 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Login to Github Container Registry uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v4 with: build-args: | BASE=${{ matrix.BASE }} SCRYPTED_INSTALL_VERSION=${{ steps.package-version.outputs.NPM_VERSION }} context: install/docker/ file: install/docker/Dockerfile${{ matrix.SUPERVISOR }} platforms: linux/amd64,linux/arm64 push: true tags: | ${{ format('koush/scrypted:{0}{1}-v{2}', matrix.BASE, matrix.SUPERVISOR, github.event.inputs.publish_tag || steps.package-version.outputs.NPM_VERSION) }} ${{ matrix.BASE == '20-jammy-full' && matrix.SUPERVISOR == '.s6' && format('koush/scrypted:{0}', github.event.inputs.tag) || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-full' && matrix.SUPERVISOR == '' && 'koush/scrypted:full' || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-lite' && matrix.SUPERVISOR == '' && 'koush/scrypted:lite' || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-lite' && matrix.SUPERVISOR == '.s6' && 'koush/scrypted:lite-s6' || '' }} ${{ format('ghcr.io/koush/scrypted:{0}{1}-v{2}', matrix.BASE, matrix.SUPERVISOR, github.event.inputs.publish_tag || steps.package-version.outputs.NPM_VERSION) }} ${{ matrix.BASE == '20-jammy-full' && matrix.SUPERVISOR == '.s6' && format('ghcr.io/koush/scrypted:{0}', github.event.inputs.tag) || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-full' && matrix.SUPERVISOR == '' && 'ghcr.io/koush/scrypted:full' || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-lite' && matrix.SUPERVISOR == '' && 'ghcr.io/koush/scrypted:lite' || '' }} ${{ github.event.inputs.tag == 'latest' && matrix.BASE == '20-jammy-lite' && matrix.SUPERVISOR == '.s6' && 'ghcr.io/koush/scrypted:lite-s6' || '' }} cache-from: type=gha cache-to: type=gha,mode=max