Update workflow #81
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| workflow_dispatch: | |
| schedule: | |
| - cron: '0 6 * * 5' # Every Friday at 06:00 UTC | |
| push: | |
| branches: | |
| - '**' | |
| paths-ignore: | |
| - '**/*.md' | |
| - '**/*.png' | |
| tags: | |
| - 'v*' | |
| pull_request: | |
| branches: | |
| - 'main' | |
| env: | |
| NET_SOLUTION: GostGen/GostGen.slnx | |
| NET_PROJECT: GostGen/source/GostGen.csproj | |
| NET_PUBLISH_DIR: GostGen/publish/ | |
| NET_PUBLISH_ARGS: "--verbosity normal --configuration Release -p:DebugType=embedded -p:PublishSingleFile=true --self-contained" | |
| DOCKER_REGISTRY: ghcr.io | |
| DOCKER_IMAGE_NAME: mullvad-proxy-gateway | |
| DOCKER_PLATFORMS: linux/amd64,linux/arm64/v8,linux/arm/v7 | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| id-token: write | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| fetch-tags: true | |
| - name: .NET Setup | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: | | |
| 10.0.x | |
| - name: Get Version from Tag | |
| uses: ChrSchu90/GitTagSemanticVersion@v1.1 | |
| if: startsWith(github.event.ref, 'refs/tags/v') | |
| id: tagver | |
| - name: .NET Restore | |
| run: dotnet restore ${{ env.NET_SOLUTION }} | |
| - name: .NET Build | |
| run: dotnet build ${{ env.NET_SOLUTION }} --verbosity normal --no-restore --configuration Release | |
| - name: .NET Test | |
| run: dotnet test ${{ env.NET_SOLUTION }} --verbosity normal --no-restore --no-build --configuration Release | |
| - name: .NET Publish amd64 | |
| run: | | |
| if [ -n "${{ steps.tagver.outputs.version }}" ]; then | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-x64 ${{ env.NET_PUBLISH_ARGS }} -p:Version=${{ steps.tagver.outputs.version }} -o ${{ env.NET_PUBLISH_DIR }}linux/amd64 | |
| else | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-x64 ${{ env.NET_PUBLISH_ARGS }} -o ${{ env.NET_PUBLISH_DIR }}linux/amd64 | |
| fi | |
| - name: .NET Publish arm64 | |
| run: | | |
| if [ -n "${{ steps.tagver.outputs.version }}" ]; then | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-arm64 ${{ env.NET_PUBLISH_ARGS }} -p:Version=${{ steps.tagver.outputs.version }} -o ${{ env.NET_PUBLISH_DIR }}linux/arm64 | |
| else | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-arm64 ${{ env.NET_PUBLISH_ARGS }} -o ${{ env.NET_PUBLISH_DIR }}linux/arm64 | |
| fi | |
| - name: .NET Publish armv7 | |
| run: | | |
| if [ -n "${{ steps.tagver.outputs.version }}" ]; then | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-arm ${{ env.NET_PUBLISH_ARGS }} -p:Version=${{ steps.tagver.outputs.version }} -o ${{ env.NET_PUBLISH_DIR }}linux/armv7 | |
| else | |
| dotnet publish ${{ env.NET_PROJECT }} -r linux-musl-arm ${{ env.NET_PUBLISH_ARGS }} -o ${{ env.NET_PUBLISH_DIR }}linux/armv7 | |
| fi | |
| - name: Docker QEMU Setup | |
| uses: docker/setup-qemu-action@v4 | |
| - name: Docker Buildx Setup | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Docker Login | |
| uses: docker/login-action@v4 | |
| with: | |
| registry: ${{ env.DOCKER_REGISTRY }} | |
| username: ${{ github.repository_owner }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Docker tags/labels | |
| uses: docker/metadata-action@v6 | |
| id: dockermeta | |
| with: | |
| images: ${{ env.DOCKER_REGISTRY }}/${{ github.repository_owner }}/${{ env.DOCKER_IMAGE_NAME }} | |
| tags: | | |
| # latest – Most recent stable release | |
| type=raw,value=latest,enable=${{ steps.tagver.outputs.is_release == 'true' }} | |
| # Latest stable release in major version | |
| type=raw,value=${{ steps.tagver.outputs.major }},enable=${{ steps.tagver.outputs.is_release == 'true' }} | |
| # Latest stable release in major + minor version | |
| type=raw,value=${{ steps.tagver.outputs.major }}.${{ steps.tagver.outputs.minor }},enable=${{ steps.tagver.outputs.is_release == 'true' }} | |
| # Specific stable patch version (fully pinned) | |
| type=raw,value=${{ steps.tagver.outputs.version }},enable=${{ steps.tagver.outputs.is_release == 'true' }} | |
| # Latest preview build | |
| type=raw,value=preview,enable=${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| # Latest preview for major version | |
| type=raw,value=${{ steps.tagver.outputs.major }}-preview,enable=${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| # Latest preview for minor + minor version | |
| type=raw,value=${{ steps.tagver.outputs.major }}.${{ steps.tagver.outputs.minor }}-preview,enable=${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| # Latest preview for minor + minor + patch version | |
| type=raw,value=${{ steps.tagver.outputs.version }}-preview,enable=${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| # Specific preview build (fully pinned) | |
| type=raw,value=${{ steps.tagver.outputs.version }}-${{ steps.tagver.outputs.suffix }},enable=${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| # Test build | |
| type=raw,value=ci,enable=${{ steps.tagver.outputs.is_valid != 'true' }} | |
| - name: Docker build/push | |
| if: ${{ steps.dockermeta.outcome == 'success' }} | |
| uses: docker/build-push-action@v7 | |
| with: | |
| context: . | |
| push: ${{ steps.tagver.outputs.is_valid == 'true' }} | |
| platforms: ${{ env.DOCKER_PLATFORMS }} | |
| tags: ${{ steps.dockermeta.outputs.tags }} | |
| labels: ${{ steps.dockermeta.outputs.labels }} | |
| #cache-from: type=gha | |
| #cache-to: type=gha,mode=max | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| if: ${{ steps.tagver.outputs.is_valid == 'true' }} | |
| with: | |
| tag_name: ${{ steps.tagver.outputs.version_tag }} | |
| prerelease: ${{ steps.tagver.outputs.is_prerelease == 'true' }} | |
| make_latest: ${{ steps.tagver.outputs.is_release == 'true' }} |