name: Release on: push: branches: - main paths-ignore: - 'README.md' - 'CONTRIBUTING.md' - 'COPYING' - 'docs/**' - '.github/*.md' - '.github/FUNDING.yml' jobs: release: runs-on: ubuntu-latest outputs: upload_url: ${{ steps.create_release.outputs.upload_url }} version: ${{ steps.changelog.outputs.version }} skipped: ${{ steps.changelog.outputs.skipped }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Create changelog id: changelog uses: TriPSs/conventional-changelog-action@v3 with: github-token: ${{ secrets.github_token }} skip-version-file: "true" output-file: "false" skip-commit: "true" skip-on-empty: "true" - name: Create Github Release id: create_release uses: actions/create-release@v1 if: ${{ steps.changelog.outputs.skipped == 'false' }} env: GITHUB_TOKEN: ${{ secrets.github_token }} with: tag_name: ${{ steps.changelog.outputs.tag }} release_name: ${{ steps.changelog.outputs.tag }} body: ${{ steps.changelog.outputs.clean_changelog }} artifacts: needs: release if: ${{ needs.release.outputs.skipped == 'false' }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] include: - os: ubuntu-latest ARTIFACT: posh-linux-amd64 - os: macos-latest ARTIFACT: posh-darwin-amd64 - os: windows-latest ARTIFACT: posh-windows-amd64.exe runs-on: ${{ matrix.os }} outputs: hash_linux: ${{ steps.hash.outputs.hash_ubuntu-latest }} hash_macos: ${{ steps.hash.outputs.hash_macos-latest }} hash_windows: ${{ steps.hash.outputs.hash_windows-latest }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.15.x - name: Checkout code uses: actions/checkout@v2 - name: Build id: build run: go build -o ${{ matrix.ARTIFACT }} env: GOARCH: "amd64" - name: Hash id: hash run: | $fileHash = Get-FileHash ${{ matrix.ARTIFACT }} -Algorithm SHA256 $fileHash.Hash | Out-File -Encoding 'UTF8' ${{ matrix.ARTIFACT }}.sha256 Write-Output "::set-output name=hash_${{ matrix.os }}::$($fileHash.Hash)" shell: pwsh - name: Upload Release Asset id: upload-release-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ matrix.ARTIFACT }} asset_name: ${{ matrix.ARTIFACT }} asset_content_type: application/octet-stream - name: Upload Hash Asset id: upload-hash-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ matrix.ARTIFACT }}.sha256 asset_name: ${{ matrix.ARTIFACT }}.sha256 asset_content_type: text/plain themes: needs: release if: ${{ needs.release.outputs.skipped == 'false' }} runs-on: ubuntu-latest outputs: hash_themes: ${{ steps.hash.outputs.hash_themes }} defaults: run: shell: pwsh steps: - name: Checkout code uses: actions/checkout@v2 - name: Zip theme files run: | $compress = @{ Path = "themes\*.json" CompressionLevel = "Fastest" DestinationPath = "themes.zip" } Compress-Archive @compress - name: Hash id: hash run: | $fileHash = Get-FileHash themes.zip -Algorithm SHA256 $fileHash.Hash | Out-File -Encoding 'UTF8' themes.zip.sha256 Write-Output "::set-output name=hash_themes::$($fileHash.Hash)" - name: Upload Themes id: upload-themes uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: themes.zip asset_name: themes.zip asset_content_type: application/octet-stream - name: Upload Themes Hash id: upload-hash-asset uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: themes.zip.sha256 asset_name: themes.zip.sha256 asset_content_type: text/plain homebrew: needs: release if: ${{ needs.release.outputs.skipped == 'false' }} runs-on: ubuntu-latest env: GH_KEY: ${{ secrets.GH_PAT }} steps: - name: Push Version run: | curl -XPOST -u "jandedobbeleer:$GH_KEY" \ -H "Accept: application/vnd.github.everest-preview+json" \ -H "Content-Type: application/json" https://api.github.com/repos/jandedobbeleer/homebrew-oh-my-posh/actions/workflows/release.yml/dispatches \ --data '{"ref": "main", "inputs": {"version": "${{ needs.release.outputs.version }}"} }' powershell: needs: [release, artifacts] if: ${{ needs.release.outputs.skipped == 'false' }} runs-on: ubuntu-latest defaults: run: shell: pwsh working-directory: ${{ github.workspace }}/packages/powershell/oh-my-posh env: PSGALLERY_KEY: ${{ secrets.PSGALLERY_KEY }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Pack and push run: ./deploy.ps1 -BinVersion ${{ needs.release.outputs.version }} -ModuleVersion ${{ needs.release.outputs.version }} -Repository PSGallery -RepositoryAPIKey $env:PSGALLERY_KEY scoop: needs: [release, artifacts, themes] if: ${{ needs.release.outputs.skipped == 'false' }} runs-on: ubuntu-latest defaults: run: shell: pwsh working-directory: ${{ github.workspace }}/packages/scoop steps: - name: Checkout code uses: actions/checkout@v2 - name: Update Template run: ./build.ps1 -Version ${{ needs.release.outputs.version }} -LinuxSHA ${{ needs.artifacts.outputs.hash_linux }} -WindowsSHA ${{ needs.artifacts.outputs.hash_windows }} -ThemesSHA ${{ needs.themes.outputs.hash_themes }} - name: Upload Scoop JSON id: upload-scoop-json uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ github.workspace }}/packages/scoop/oh-my-posh.json asset_name: oh-my-posh.json asset_content_type: text/plain - name: Upload Scoop Post Install id: upload-scoop-post-install uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ needs.release.outputs.upload_url }} asset_path: ${{ github.workspace }}/packages/scoop/post-install.ps1 asset_name: post-install.ps1 asset_content_type: text/plain