mirror of https://github.com/ErsatzTV/ErsatzTV.git
				
				
			
			
			
				Browse Source
			
			
			
			
				
		* refactor reusable docker workflow * refactor reusable artifacts workflow * fix name * try to fix * fixpull/588/head
				 6 changed files with 274 additions and 321 deletions
			
			
		@ -0,0 +1,118 @@
				@@ -0,0 +1,118 @@
					 | 
				
			||||
name: Build Artifacts | 
				
			||||
on: | 
				
			||||
  workflow_call: | 
				
			||||
    inputs: | 
				
			||||
      release_tag: | 
				
			||||
        description: 'Release tag' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
      release_version: | 
				
			||||
        description: 'Release version number (e.g. v0.3.7-alpha)' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
      info_version: | 
				
			||||
        description: 'Informational version number (e.g. 0.3.7-alpha)' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
jobs: | 
				
			||||
  build_and_upload: | 
				
			||||
    name: Build & Upload Artifacts | 
				
			||||
    runs-on: ${{ matrix.os }} | 
				
			||||
    if: contains(github.event.head_commit.message, '[no build]') == false | 
				
			||||
    strategy: | 
				
			||||
      matrix: | 
				
			||||
        include: | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-x64 | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-arm | 
				
			||||
          - os: windows-latest | 
				
			||||
            kind: windows | 
				
			||||
            target: win-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-arm64 | 
				
			||||
    steps: | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
        with: | 
				
			||||
          fetch-depth: 0 | 
				
			||||
 | 
				
			||||
      - name: Setup .NET Core | 
				
			||||
        uses: actions/setup-dotnet@v1 | 
				
			||||
        with: | 
				
			||||
          dotnet-version: 6.0.x | 
				
			||||
 | 
				
			||||
      - name: Clean | 
				
			||||
        run: dotnet clean --configuration Release && dotnet nuget locals all --clear | 
				
			||||
 | 
				
			||||
      - name: Install dependencies | 
				
			||||
        run: dotnet restore -r "${{ matrix.target}}" | 
				
			||||
 | 
				
			||||
      - name: Import Code-Signing Certificates | 
				
			||||
        uses: Apple-Actions/import-codesign-certs@v1 | 
				
			||||
        if: matrix.kind == 'macOS' | 
				
			||||
        with: | 
				
			||||
          p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} | 
				
			||||
          p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }} | 
				
			||||
 | 
				
			||||
      - name: Build | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          # Define some variables for things we need | 
				
			||||
          release_name="ErsatzTV-${{ inputs.release_version }}-${{ matrix.target }}" | 
				
			||||
          echo "RELEASE_NAME=${release_name}" >> $GITHUB_ENV | 
				
			||||
           | 
				
			||||
          # Build everything | 
				
			||||
          if [ "${{ matrix.kind }}" == "macOS" ]; then | 
				
			||||
            brew tap mitchellh/gon | 
				
			||||
            brew install mitchellh/gon/gon | 
				
			||||
            dotnet msbuild ErsatzTV/ErsatzTV.csproj -t:BundleApp -p:RuntimeIdentifier="${{ matrix.target }}" -p:CFBundleVersion="${{ inputs.info_version }}" -p:Configuration=Release -p:CFBundleShortVersionString="${{ inputs.info_version }}" -p:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" -p:PublishDir=$(pwd)/release | 
				
			||||
            cp scripts/macOS/launcher.sh release/ErsatzTV.app/Contents/MacOS/ | 
				
			||||
            scripts/macOS/sign.sh | 
				
			||||
            gon -log-level=debug -log-json ./gon.json | 
				
			||||
            mv release/ErsatzTV.dmg "${release_name}.dmg" | 
				
			||||
            rm -r release | 
				
			||||
          else | 
				
			||||
            dotnet publish ErsatzTV/ErsatzTV.csproj --framework net6.0 --runtime "${{ matrix.target }}" -c Release -o "$release_name" /property:InformationalVersion="${{ inputs.release_version }}-${{ matrix.target }}" /property:EnableCompressionInSingleFile=true /property:DebugType=Embedded /property:PublishSingleFile=true --self-contained true | 
				
			||||
           | 
				
			||||
            # Pack files | 
				
			||||
            if [ "${{ matrix.target }}" == "win-x64" ]; then | 
				
			||||
              7z a -tzip "${release_name}.zip" "./${release_name}/*" | 
				
			||||
            else | 
				
			||||
              tar czvf "${release_name}.tar.gz" "$release_name" | 
				
			||||
            fi | 
				
			||||
 | 
				
			||||
            # Delete output directory | 
				
			||||
            rm -r "$release_name" | 
				
			||||
          fi | 
				
			||||
        env: | 
				
			||||
          AC_USERNAME: ${{ secrets.AC_USERNAME }} | 
				
			||||
          AC_PASSWORD: ${{ secrets.AC_PASSWORD }} | 
				
			||||
 | 
				
			||||
      - name: Delete old release assets | 
				
			||||
        uses: mknejp/delete-release-assets@v1 | 
				
			||||
        with: | 
				
			||||
          token: ${{ secrets.GITHUB_TOKEN }} | 
				
			||||
          tag: ${{ inputs.release_tag }} | 
				
			||||
          fail-if-no-assets: false | 
				
			||||
          assets: | | 
				
			||||
            *${{ matrix.target }}.zip | 
				
			||||
            *${{ matrix.target }}.tar.gz | 
				
			||||
            *${{ matrix.target }}.dmg | 
				
			||||
      - name: Publish | 
				
			||||
        uses: softprops/action-gh-release@v1 | 
				
			||||
        with: | 
				
			||||
          prerelease: true | 
				
			||||
          tag_name: ${{ inputs.release_tag }} | 
				
			||||
          files: | | 
				
			||||
            ${{ env.RELEASE_NAME }}.zip | 
				
			||||
            ${{ env.RELEASE_NAME }}.tar.gz | 
				
			||||
            ${{ env.RELEASE_NAME }}.dmg | 
				
			||||
        env: | 
				
			||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | 
				
			||||
@ -1,216 +1,44 @@
				@@ -1,216 +1,44 @@
					 | 
				
			||||
name: Build | 
				
			||||
on: | 
				
			||||
  workflow_dispatch: | 
				
			||||
  pull_request: | 
				
			||||
  push: | 
				
			||||
    branches: | 
				
			||||
      - main | 
				
			||||
jobs: | 
				
			||||
  build_and_test: | 
				
			||||
    runs-on: ${{ matrix.os }} | 
				
			||||
    strategy: | 
				
			||||
      fail-fast: false | 
				
			||||
      matrix: | 
				
			||||
        os: [ windows-latest, ubuntu-latest, macos-latest ] | 
				
			||||
    steps: | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
 | 
				
			||||
      - name: Setup .NET Core | 
				
			||||
        uses: actions/setup-dotnet@v1 | 
				
			||||
        with: | 
				
			||||
          dotnet-version: 6.0.x | 
				
			||||
 | 
				
			||||
      - name: Clean | 
				
			||||
        run: dotnet clean --configuration Release && dotnet nuget locals all --clear | 
				
			||||
 | 
				
			||||
      - name: Install dependencies | 
				
			||||
        run: dotnet restore | 
				
			||||
 | 
				
			||||
      - name: Build | 
				
			||||
        run: dotnet build --configuration Release --no-restore | 
				
			||||
 | 
				
			||||
      - name: Test | 
				
			||||
        run: dotnet test --no-restore --verbosity normal | 
				
			||||
  build_and_upload: | 
				
			||||
    name: Build & Upload Develop Artifacts | 
				
			||||
    needs: build_and_test | 
				
			||||
    runs-on: ${{ matrix.os }} | 
				
			||||
    if: github.event_name == 'push' && !contains(github.event.head_commit.message, '[no build]') | 
				
			||||
    strategy: | 
				
			||||
      matrix: | 
				
			||||
        include: | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-x64 | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-arm | 
				
			||||
          - os: windows-latest | 
				
			||||
            kind: windows | 
				
			||||
            target: win-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-arm64 | 
				
			||||
  calculate_version: | 
				
			||||
    name: Calculate version information | 
				
			||||
    runs-on: ubuntu-latest | 
				
			||||
    steps: | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
        with: | 
				
			||||
          fetch-depth: 0 | 
				
			||||
 | 
				
			||||
      - name: Setup .NET Core | 
				
			||||
        uses: actions/setup-dotnet@v1 | 
				
			||||
        with: | 
				
			||||
          dotnet-version: 6.0.x | 
				
			||||
 | 
				
			||||
      - name: Clean | 
				
			||||
        run: dotnet clean --configuration Release && dotnet nuget locals all --clear | 
				
			||||
 | 
				
			||||
      - name: Install dependencies | 
				
			||||
        run: dotnet restore -r "${{ matrix.target}}" | 
				
			||||
         | 
				
			||||
      - name: Import Code-Signing Certificates | 
				
			||||
        uses: Apple-Actions/import-codesign-certs@v1 | 
				
			||||
        if: matrix.kind == 'macOS' | 
				
			||||
        with: | 
				
			||||
          p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }} | 
				
			||||
          p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}         | 
				
			||||
 | 
				
			||||
      - name: Build | 
				
			||||
      - name: Extract Docker Tag | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          # Define some variables for things we need | 
				
			||||
          tag=$(git describe --tags --abbrev=0) | 
				
			||||
          tag2="${tag:1}" | 
				
			||||
          short=$(git rev-parse --short HEAD) | 
				
			||||
          final="${tag2/alpha/$short}" | 
				
			||||
          release_name="ErsatzTV-$final-${{ matrix.target }}" | 
				
			||||
          echo "RELEASE_NAME=${release_name}" >> $GITHUB_ENV | 
				
			||||
                   | 
				
			||||
          # Build everything | 
				
			||||
          if [ "${{ matrix.kind }}" == "macOS" ]; then | 
				
			||||
            brew tap mitchellh/gon | 
				
			||||
            brew install mitchellh/gon/gon | 
				
			||||
            dotnet msbuild ErsatzTV/ErsatzTV.csproj -t:BundleApp -p:RuntimeIdentifier="${{ matrix.target }}" -p:CFBundleVersion="${tag2}" -p:Configuration=Release -p:CFBundleShortVersionString="${tag2}" -p:InformationalVersion="$final-${{ matrix.target }}" -p:PublishDir=$(pwd)/release | 
				
			||||
            cp scripts/macOS/launcher.sh release/ErsatzTV.app/Contents/MacOS/ | 
				
			||||
            scripts/macOS/sign.sh | 
				
			||||
            gon -log-level=debug -log-json ./gon.json | 
				
			||||
            mv release/ErsatzTV.dmg "${release_name}.dmg" | 
				
			||||
            rm -r release | 
				
			||||
          else | 
				
			||||
            dotnet publish ErsatzTV/ErsatzTV.csproj --framework net6.0 --runtime "${{ matrix.target }}" -c Release -o "$release_name" /property:InformationalVersion="$final-${{ matrix.target }}" /property:EnableCompressionInSingleFile=true /property:DebugType=Embedded /property:PublishSingleFile=true --self-contained true | 
				
			||||
   | 
				
			||||
            # Pack files | 
				
			||||
            if [ "${{ matrix.target }}" == "win-x64" ]; then | 
				
			||||
              7z a -tzip "${release_name}.zip" "./${release_name}/*" | 
				
			||||
            else | 
				
			||||
              tar czvf "${release_name}.tar.gz" "$release_name" | 
				
			||||
            fi | 
				
			||||
 | 
				
			||||
            # Delete output directory | 
				
			||||
            rm -r "$release_name" | 
				
			||||
          fi | 
				
			||||
        env: | 
				
			||||
          AC_USERNAME: ${{ secrets.AC_USERNAME }} | 
				
			||||
          AC_PASSWORD: ${{ secrets.AC_PASSWORD }} | 
				
			||||
 | 
				
			||||
      - name: Delete old release assets | 
				
			||||
        uses: mknejp/delete-release-assets@v1 | 
				
			||||
        with: | 
				
			||||
          token: ${{ secrets.GITHUB_TOKEN }} | 
				
			||||
          tag: develop | 
				
			||||
          fail-if-no-assets: false | 
				
			||||
          assets: | | 
				
			||||
            *${{ matrix.target }}.zip | 
				
			||||
            *${{ matrix.target }}.tar.gz | 
				
			||||
            *${{ matrix.target }}.dmg | 
				
			||||
      - name: Publish | 
				
			||||
        uses: softprops/action-gh-release@v1 | 
				
			||||
        with: | 
				
			||||
          prerelease: true | 
				
			||||
          tag_name: develop | 
				
			||||
          files: | | 
				
			||||
            ${{ env.RELEASE_NAME }}.zip | 
				
			||||
            ${{ env.RELEASE_NAME }}.tar.gz | 
				
			||||
            ${{ env.RELEASE_NAME }}.dmg | 
				
			||||
        env: | 
				
			||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | 
				
			||||
  build_and_push: | 
				
			||||
    name: Build & Publish to Docker Hub | 
				
			||||
    needs: build_and_test | 
				
			||||
    runs-on: ubuntu-latest | 
				
			||||
    if: github.event_name == 'push' && !contains(github.event.head_commit.message, '[no build]') | 
				
			||||
    steps: | 
				
			||||
      - name: Checkout | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
        with: | 
				
			||||
          fetch-depth: 0 | 
				
			||||
 | 
				
			||||
      - name: Extract Git Tag | 
				
			||||
          echo "GIT_TAG=${final}" >> $GITHUB_ENV | 
				
			||||
      - name: Extract Artifacts Version | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          tag=$(git describe --tags --abbrev=0) | 
				
			||||
          tag2="${tag:1}" | 
				
			||||
          short=$(git rev-parse --short HEAD) | 
				
			||||
          final="${tag2/alpha/$short}" | 
				
			||||
          echo "GIT_TAG=${final}" >> $GITHUB_ENV | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx Base | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-base | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx NVIDIA | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-nvidia | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx VAAPI | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-vaapi | 
				
			||||
 | 
				
			||||
      - name: Login to DockerHub | 
				
			||||
        uses: docker/login-action@v1 | 
				
			||||
        with: | 
				
			||||
          username: ${{ secrets.DOCKER_HUB_USERNAME }} | 
				
			||||
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | 
				
			||||
 | 
				
			||||
      - name: Build and push base | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-base.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:develop | 
				
			||||
            jasongdove/ersatztv:${{ github.sha }} | 
				
			||||
 | 
				
			||||
      - name: Build and push nvidia | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-nvidia.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/nvidia/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker-nvidia | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:develop-nvidia | 
				
			||||
            jasongdove/ersatztv:${{ github.sha }}-nvidia | 
				
			||||
 | 
				
			||||
      - name: Build and push vaapi | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-vaapi.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/vaapi/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker-vaapi | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:develop-vaapi | 
				
			||||
            jasongdove/ersatztv:${{ github.sha }}-vaapi | 
				
			||||
          echo "ARTIFACTS_VERSION=${final}" >> $GITHUB_ENV | 
				
			||||
          echo "INFO_VERSION=${tag2}" >> $GITHUB_ENV | 
				
			||||
  build_and_upload: | 
				
			||||
    uses: jasongdove/ersatztv/.github/workflows/artifacts.yml@main | 
				
			||||
    with: | 
				
			||||
      release_tag: develop | 
				
			||||
      release_version: ${{ env.ARTIFACTS_VERSION }} | 
				
			||||
      info_version: ${{ env.INFO_VERSION }} | 
				
			||||
  build_and_push: | 
				
			||||
    uses: jasongdove/ersatztv/.github/workflows/docker.yml@main | 
				
			||||
    with: | 
				
			||||
      base_version: develop | 
				
			||||
      info_version: ${{ env.GIT_TAG }} | 
				
			||||
      tag_version: ${{ github.sha }} | 
				
			||||
				 
					 | 
				
			||||
@ -0,0 +1,83 @@
				@@ -0,0 +1,83 @@
					 | 
				
			||||
name: Build & Publish to Docker Hub | 
				
			||||
on: | 
				
			||||
  workflow_call: | 
				
			||||
    inputs: | 
				
			||||
      base_version: | 
				
			||||
        description: 'Base version (latest or develop)' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
      info_version: | 
				
			||||
        description: 'Informational version number (e.g. 0.3.7-alpha)' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
      tag_version: | 
				
			||||
        description: 'Docker tag version (e.g. v0.3.7)' | 
				
			||||
        required: true | 
				
			||||
        type: string | 
				
			||||
jobs: | 
				
			||||
  build_and_push: | 
				
			||||
    name: Build & Publish | 
				
			||||
    runs-on: ubuntu-latest | 
				
			||||
    if: contains(github.event.head_commit.message, '[no build]') == false | 
				
			||||
    steps: | 
				
			||||
      - name: Checkout | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
        with: | 
				
			||||
          fetch-depth: 0 | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx Base | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-base | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx NVIDIA | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-nvidia | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx VAAPI | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-vaapi | 
				
			||||
 | 
				
			||||
      - name: Login to DockerHub | 
				
			||||
        uses: docker/login-action@v1 | 
				
			||||
        with: | 
				
			||||
          username: ${{ secrets.DOCKER_HUB_USERNAME }} | 
				
			||||
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | 
				
			||||
 | 
				
			||||
      - name: Build and push base | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-base.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ inputs.info_version }}-docker | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:${{ inputs.base_version }} | 
				
			||||
            jasongdove/ersatztv:${{ inputs.tag_version }} | 
				
			||||
 | 
				
			||||
      - name: Build and push nvidia | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-nvidia.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/nvidia/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ inputs.info_version }}-docker-nvidia | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:${{ inputs.base_version }}-nvidia | 
				
			||||
            jasongdove/ersatztv:${{ inputs.tag_version }}-nvidia | 
				
			||||
 | 
				
			||||
      - name: Build and push vaapi | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-vaapi.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/vaapi/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ inputs.info_version }}-docker-vaapi | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:${{ inputs.base_version }}-vaapi | 
				
			||||
            jasongdove/ersatztv:${{ inputs.tag_version }}-vaapi | 
				
			||||
@ -0,0 +1,30 @@
				@@ -0,0 +1,30 @@
					 | 
				
			||||
name: Pull Request | 
				
			||||
on: | 
				
			||||
  pull_request: | 
				
			||||
jobs: | 
				
			||||
  build_and_test: | 
				
			||||
    runs-on: ${{ matrix.os }} | 
				
			||||
    strategy: | 
				
			||||
      fail-fast: false | 
				
			||||
      matrix: | 
				
			||||
        os: [ windows-latest, ubuntu-latest, macos-latest ] | 
				
			||||
    steps: | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
 | 
				
			||||
      - name: Setup .NET Core | 
				
			||||
        uses: actions/setup-dotnet@v1 | 
				
			||||
        with: | 
				
			||||
          dotnet-version: 6.0.x | 
				
			||||
 | 
				
			||||
      - name: Clean | 
				
			||||
        run: dotnet clean --configuration Release && dotnet nuget locals all --clear | 
				
			||||
 | 
				
			||||
      - name: Install dependencies | 
				
			||||
        run: dotnet restore | 
				
			||||
 | 
				
			||||
      - name: Build | 
				
			||||
        run: dotnet build --configuration Release --no-restore | 
				
			||||
 | 
				
			||||
      - name: Test | 
				
			||||
        run: dotnet test --no-restore --verbosity normal | 
				
			||||
@ -1,142 +1,37 @@
				@@ -1,142 +1,37 @@
					 | 
				
			||||
name: Publish | 
				
			||||
name: Release | 
				
			||||
on: | 
				
			||||
  release: | 
				
			||||
    types: [ published ] | 
				
			||||
jobs: | 
				
			||||
  release: | 
				
			||||
    name: Release | 
				
			||||
    strategy: | 
				
			||||
      matrix: | 
				
			||||
        include: | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-x64 | 
				
			||||
          - os: ubuntu-latest | 
				
			||||
            kind: linux | 
				
			||||
            target: linux-arm | 
				
			||||
          - os: windows-latest | 
				
			||||
            kind: windows | 
				
			||||
            target: win-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-x64 | 
				
			||||
          - os: macos-latest | 
				
			||||
            kind: macOS | 
				
			||||
            target: osx-arm64 | 
				
			||||
    runs-on: ${{ matrix.os }} | 
				
			||||
    steps: | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
 | 
				
			||||
      - name: Setup .NET Core | 
				
			||||
        uses: actions/setup-dotnet@v1 | 
				
			||||
        with: | 
				
			||||
          dotnet-version: 6.0.x | 
				
			||||
 | 
				
			||||
      - name: Clean | 
				
			||||
        run: dotnet clean --configuration Release && dotnet nuget locals all --clear | 
				
			||||
 | 
				
			||||
      - name: Install dependencies | 
				
			||||
        run: dotnet restore | 
				
			||||
 | 
				
			||||
      - name: Build | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          # Define some variables for things we need | 
				
			||||
          tag=$(git describe --tags --abbrev=0) | 
				
			||||
          release_name="ErsatzTV-$tag-${{ matrix.target }}" | 
				
			||||
 | 
				
			||||
          # Build everything | 
				
			||||
          dotnet publish ErsatzTV/ErsatzTV.csproj --framework net6.0 --runtime "${{ matrix.target }}" -c Release -o "$release_name" /property:InformationalVersion="${tag:1}-${{ matrix.target }}" /property:EnableCompressionInSingleFile=true /property:DebugType=Embedded /property:PublishSingleFile=true --self-contained true | 
				
			||||
 | 
				
			||||
          # Pack files | 
				
			||||
          if [ "${{ matrix.target }}" == "win-x64" ]; then | 
				
			||||
            7z a -tzip "${release_name}.zip" "./${release_name}/*" | 
				
			||||
          else | 
				
			||||
            tar czvf "${release_name}.tar.gz" "$release_name" | 
				
			||||
          fi | 
				
			||||
 | 
				
			||||
          # Delete output directory | 
				
			||||
          rm -r "$release_name" | 
				
			||||
 | 
				
			||||
      - name: Publish | 
				
			||||
        uses: softprops/action-gh-release@v1 | 
				
			||||
        with: | 
				
			||||
          prerelease: true | 
				
			||||
          files: | | 
				
			||||
            ErsatzTV*.zip | 
				
			||||
            ErsatzTV*.tar.gz | 
				
			||||
        env: | 
				
			||||
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | 
				
			||||
  build_and_push: | 
				
			||||
    name: Build & Publish to Docker Hub | 
				
			||||
  calculate_version: | 
				
			||||
    name: Calculate version information | 
				
			||||
    runs-on: ubuntu-latest | 
				
			||||
    steps: | 
				
			||||
      - name: Checkout | 
				
			||||
      - name: Get the sources | 
				
			||||
        uses: actions/checkout@v2 | 
				
			||||
        with: | 
				
			||||
          fetch-depth: 0 | 
				
			||||
 | 
				
			||||
      - name: Extract Git Tag | 
				
			||||
      - name: Extract Docker Tag | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          tag=$(git describe --tags --abbrev=0) | 
				
			||||
          echo "GIT_TAG=${tag:1}" >> $GITHUB_ENV | 
				
			||||
          echo "DOCKER_TAG=${tag/-alpha/}" >> $GITHUB_ENV | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx Base | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-base | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx NVIDIA | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-nvidia | 
				
			||||
 | 
				
			||||
      - name: Set up Docker Buildx VAAPI | 
				
			||||
        uses: docker/setup-buildx-action@v1 | 
				
			||||
        id: builder-vaapi | 
				
			||||
 | 
				
			||||
      - name: Login to DockerHub | 
				
			||||
        uses: docker/login-action@v1 | 
				
			||||
        with: | 
				
			||||
          username: ${{ secrets.DOCKER_HUB_USERNAME }} | 
				
			||||
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | 
				
			||||
 | 
				
			||||
      - name: Build and push base | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-base.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:latest | 
				
			||||
            jasongdove/ersatztv:${{ env.DOCKER_TAG }} | 
				
			||||
 | 
				
			||||
      - name: Build and push nvidia | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-nvidia.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/nvidia/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker-nvidia | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:latest-nvidia | 
				
			||||
            jasongdove/ersatztv:${{ env.DOCKER_TAG }}-nvidia | 
				
			||||
 | 
				
			||||
      - name: Build and push vaapi | 
				
			||||
        uses: docker/build-push-action@v2 | 
				
			||||
        with: | 
				
			||||
          builder: ${{ steps.builder-vaapi.outputs.name }} | 
				
			||||
          context: . | 
				
			||||
          file: ./docker/vaapi/Dockerfile | 
				
			||||
          push: true | 
				
			||||
          build-args: | | 
				
			||||
            INFO_VERSION=${{ env.GIT_TAG }}-docker-vaapi | 
				
			||||
          tags: | | 
				
			||||
            jasongdove/ersatztv:latest-vaapi | 
				
			||||
            jasongdove/ersatztv:${{ env.DOCKER_TAG }}-vaapi | 
				
			||||
      - name: Extract Artifacts Version | 
				
			||||
        shell: bash | 
				
			||||
        run: | | 
				
			||||
          tag=$(git describe --tags --abbrev=0) | 
				
			||||
          echo "ARTIFACTS_VERSION=${tag}" >> $GITHUB_ENV | 
				
			||||
          echo "INFO_VERSION=${tag:1}" >> $GITHUB_ENV | 
				
			||||
  build_and_upload: | 
				
			||||
    uses: jasongdove/ersatztv/.github/workflows/artifacts.yml@main | 
				
			||||
    with: | 
				
			||||
      release_tag: ${{ env.ARTIFACTS_VERSION }} | 
				
			||||
      release_version: ${{ env.ARTIFACTS_VERSION }} | 
				
			||||
      info_version: ${{ env.INFO_VERSION }} | 
				
			||||
  build_and_push: | 
				
			||||
    uses: jasongdove/ersatztv/.github/workflows/docker.yml@main | 
				
			||||
    with: | 
				
			||||
      base_version: latest | 
				
			||||
      info_version: ${{ env.GIT_TAG }} | 
				
			||||
      tag_version: ${{ env.DOCKER_TAG }} | 
				
			||||
				 
					 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue