diff --git a/.github/.ruby-version b/.github/.ruby-version new file mode 100644 index 0000000..bea438e --- /dev/null +++ b/.github/.ruby-version @@ -0,0 +1 @@ +3.3.1 diff --git a/.github/Gemfile b/.github/Gemfile new file mode 100644 index 0000000..ff72eaf --- /dev/null +++ b/.github/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +ruby file: ".ruby-version" + +gem "fpm" +gem "package_cloud" diff --git a/.github/Gemfile.lock b/.github/Gemfile.lock new file mode 100644 index 0000000..d05f444 --- /dev/null +++ b/.github/Gemfile.lock @@ -0,0 +1,68 @@ +GEM + remote: https://rubygems.org/ + specs: + arr-pm (0.0.12) + backports (3.25.0) + cabin (0.9.0) + clamp (1.0.1) + domain_name (0.6.20240107) + dotenv (3.1.2) + fpm (1.15.1) + arr-pm (~> 0.0.11) + backports (>= 2.6.2) + cabin (>= 0.6.0) + clamp (~> 1.0.0) + pleaserun (~> 0.0.29) + rexml + stud + highline (2.0.3) + http-accept (1.7.0) + http-cookie (1.0.5) + domain_name (~> 0.5) + insist (1.0.0) + json_pure (2.3.1) + mime-types (3.5.2) + mime-types-data (~> 3.2015) + mime-types-data (3.2024.0507) + mustache (0.99.8) + netrc (0.11.0) + package_cloud (0.3.14) + highline (~> 2.0.0) + json_pure (~> 2.3.0) + rainbow (= 2.2.2) + rest-client (~> 2.0) + thor (~> 1.2) + pleaserun (0.0.32) + cabin (> 0) + clamp + dotenv + insist + mustache (= 0.99.8) + stud + rainbow (2.2.2) + rake + rake (13.2.1) + rest-client (2.1.0) + http-accept (>= 1.7.0, < 2.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 4.0) + netrc (~> 0.8) + rexml (3.2.8) + strscan (>= 3.0.9) + strscan (3.1.0) + stud (0.0.23) + thor (1.3.1) + +PLATFORMS + arm64-darwin-23 + ruby + +DEPENDENCIES + fpm + package_cloud + +RUBY VERSION + ruby 3.3.1p55 + +BUNDLED WITH + 2.5.9 diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 99b6fb4..856ab51 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,6 +1,10 @@ --- version: 2 updates: + - package-ecosystem: "bundler" + directory: "/.github" + schedule: + interval: "daily" - package-ecosystem: "docker" directory: "/" schedule: diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml new file mode 100644 index 0000000..9894bf2 --- /dev/null +++ b/.github/workflows/bump-version.yml @@ -0,0 +1,52 @@ +--- +name: "bump-version" + +# yamllint disable-line rule:truthy +on: + workflow_dispatch: + inputs: + bump_type: + description: "Bump type" + default: "patch" + required: true + type: choice + options: + - patch + - minor + - major + +env: + GITHUB_ACCESS_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }} + +jobs: + bump-version: + name: bump-version + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@v4.1.4 + with: + fetch-depth: 0 + token: ${{ env.GITHUB_ACCESS_TOKEN }} + + - name: Get Latest Tag + id: latest-tag + run: | + echo GIT_LATEST_TAG="$(git describe --tags "$(git rev-list --tags --max-count=1)")" >>"$GITHUB_OUTPUT" + + - name: Compute Next Tag + id: next-tag + uses: docker://ghcr.io/dokku/semver-generator:latest + with: + bump: ${{ github.event.inputs.bump_type }} + input: ${{ steps.latest-tag.outputs.GIT_LATEST_TAG }} + + - name: Create and Push Tag + run: | + git config --global user.name 'Dokku Bot' + git config --global user.email no-reply@dokku.com + git tag "$GIT_NEXT_TAG" + git push origin "$GIT_NEXT_TAG" + env: + GIT_NEXT_TAG: ${{ steps.next-tag.outputs.version }} diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml new file mode 100644 index 0000000..4594321 --- /dev/null +++ b/.github/workflows/tagged-release.yml @@ -0,0 +1,109 @@ +--- +name: "tagged-release" + +# yamllint disable-line rule:truthy +on: + push: + tags: + - "*" + +permissions: + attestations: write + id-token: write + contents: write + +jobs: + tagged-release: + name: tagged-release + runs-on: ubuntu-22.04 + env: + CI_BRANCH: release + PACKAGECLOUD_REPOSITORY: dokku/dokku + VERSION: ${{ github.ref_name }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version-file: "go.mod" + + - name: Get Repository Name + id: repo-name + run: | + echo "REPOSITORY_NAME=$(echo "${{ github.repository }}" | cut -d '/' -f 2)" >> $GITHUB_OUTPUT + + - name: Build binaries + uses: crazy-max/ghaction-xgo@v3 + with: + xgo_version: latest + go_version: 1.21 + dest: dist + prefix: ${{ steps.repo-name.outputs.REPOSITORY_NAME }} + targets: darwin/amd64,darwin/arm64,linux/arm64,linux/amd64 + v: true + x: false + race: false + ldflags: -s -w -X main.Version=${{ github.ref_name }} + buildmode: default + trimpath: true + + - name: Attest Build Provenance - darwin-amd64 + uses: actions/attest-build-provenance@v1.1.2 + with: + subject-path: "dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-darwin-amd64" + + - name: Attest Build Provenance - darwin-arm64 + uses: actions/attest-build-provenance@v1.1.2 + with: + subject-path: "dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-darwin-arm64" + + - name: Attest Build Provenance - linux-amd64 + uses: actions/attest-build-provenance@v1.1.2 + with: + subject-path: "dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-linux-amd64" + + - name: Attest Build Provenance - linux-arm64 + uses: actions/attest-build-provenance@v1.1.2 + with: + subject-path: "dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-linux-arm64" + + - name: Setup Ruby + uses: ruby/setup-ruby@v1.176.0 + with: + bundler-cache: true + working-directory: .github + + - name: Build Debian Packages + run: | + mkdir -p build/linux + + cp dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-linux-amd64 build/linux/${{ github.repository }}-amd64 + cp dist/${{ steps.repo-name.outputs.REPOSITORY_NAME }}-linux-arm64 build/linux/${{ github.repository }}-arm64 + + bundle exec make build/deb/${{ github.repository }}_${{ github.ref_name }}_arm64.deb + bundle exec make build/deb/${{ github.repository }}_${{ github.ref_name }}_amd64.deb + cp build/deb/*.deb dist/ + env: + BUNDLE_GEMFILE: .github/Gemfile + + - name: Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: dist + path: dist/* + + - name: Release to PackageCloud + run: bundle exec make release-packagecloud + env: + BUNDLE_GEMFILE: .github/Gemfile + PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }} + + - name: Release + uses: softprops/action-gh-release@v2 + with: + files: dist/* + generate_release_notes: true + make_latest: "true"