Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the shared GitHub Actions workflows for buildpack releases #156

Merged
merged 9 commits into from
Aug 3, 2023
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions .github/workflows/prepare-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Prepare Buildpack Releases
edmorley marked this conversation as resolved.
Show resolved Hide resolved

on:
workflow_dispatch:
inputs:
bump:
description: "Bump"
required: true
default: 'patch'
edmorley marked this conversation as resolved.
Show resolved Hide resolved
type: choice
options:
- major
- minor
- patch

jobs:
prepare-release:
uses: heroku/languages-github-actions/.github/workflows/_buildpacks-prepare-release.yml@main
with:
bump: ${{ inputs.bump }}
app_id: ${{ vars.LINGUIST_GH_APP_ID }}
secrets:
app_private_key: ${{ secrets.LINGUIST_GH_PRIVATE_KEY }}
114 changes: 12 additions & 102 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,106 +1,16 @@
name: release
name: Release Buildpacks
edmorley marked this conversation as resolved.
Show resolved Hide resolved

# Allow the action to be triggered manually in the "actions"
# tab of GitHub.
on:
workflow_dispatch
workflow_dispatch:

jobs:
release:
name: Package, Publish, and Register
runs-on:
- ubuntu-22.04
permissions:
contents: write
steps:
# Needed to get the buildpack code
- name: Checkout
uses: actions/checkout@v3

# Install musl gcc needed to compile rust buildpack
# to linux musl target
- name: Install musl-tools
run: sudo apt-get install musl-tools --no-install-recommends

# Get the `pack` command for packaging the buildpack
- id: setup-pack
name: Install Pack
uses: buildpacks/github-actions/setup-pack@v5.2.0

- name: Install yj
uses: buildpacks/github-actions/setup-tools@v5.2.0

# Used by `pack buildpack package --publish`. The buildpack
# will be published to this user and password
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
registry: docker.io
username: ${{ secrets.DOCKER_HUB_USER }}
password: ${{ secrets.DOCKER_HUB_TOKEN }}

# Most of the time this will be a no-op, since GitHub releases new images every week
# which include the latest stable release of Rust, Rustup, Clippy and rustfmt.
- name: Update Rust toolchain
run: rustup update
- name: Rust Cache
uses: Swatinem/rust-cache@v2.5.1

# Needed to get `cargo libcnb package` command
- name: Install libcnb plugin
run: cargo install libcnb-cargo
# Configure Rust so it knows how to compile to the linux musl target
- name: Install Rust linux-musl target
run: rustup target add x86_64-unknown-linux-musl
# Compile the rust buildpack
- id: package-libcnb-rs
run: cargo libcnb package --release

# Pull out data from the buildpacks `buildpack.toml` to make
# it available to other commands. Also package and publish
# the buildpack to docker hub as well as generate a local
# file containing the buildpack.
- id: package
run: |
#!/usr/bin/env bash
set -euo pipefail
BP_ID="$(cat buildpack.toml | yj -t | jq -r .buildpack.id)"
VERSION="$(cat buildpack.toml | yj -t | jq -r .buildpack.version)"
ESCAPED_ID="$(echo "$BP_ID" | sed 's/\//_/g')"
PACKAGE="${REPO}"

# --publish pushes to the registry (logged in)
pack buildpack package --publish --path "target/buildpack/release/$ESCAPED_ID" "${PACKAGE}:${VERSION}"
pack buildpack package --format file --path "target/buildpack/release/$ESCAPED_ID" "${ESCAPED_ID}_${VERSION}.cnb"

DIGEST="$(crane digest ${PACKAGE}:${VERSION})"
echo "::set-output name=bp_id::$BP_ID"
echo "::set-output name=version::$VERSION"
echo "::set-output name=tag_name::v${VERSION}"
echo "::set-output name=address::${PACKAGE}@${DIGEST}"
echo "::set-output name=package::${ESCAPED_ID}_${VERSION}.cnb"
env:
REPO: docker.io/heroku/procfile-cnb

# Open a PR to the buildpack registry index.
# For example: https://github.com/buildpacks/registry-index/issues/2776
- id: register
uses: docker://ghcr.io/buildpacks/actions/registry/request-add-entry:4.2.0
with:
token: ${{ secrets.CNB_REGISTRY_RELEASE_BOT_GITHUB_TOKEN }}
id: ${{ steps.package.outputs.bp_id }}
version: ${{ steps.package.outputs.version }}
address: ${{ steps.package.outputs.address }}

# Create a release and tag on the github repo
# For example: https://github.com/heroku/procfile-cnb/releases/tag/v1.0.1
# Attaches the previously generated cloud native buildpack file (`*.cnb`)
# to the release
- id: release
name: Upload build package to release
uses: svenstaro/upload-release-action@2.6.1
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ steps.package.outputs.package }}
tag: ${{ steps.package.outputs.tag_name }}
overwrite: true
release:
name: Release
uses: heroku/languages-github-actions/.github/workflows/_buildpacks-release.yml@main
with:
app_id: ${{ vars.LINGUIST_GH_APP_ID }}
secrets:
app_private_key: ${{ secrets.LINGUIST_GH_PRIVATE_KEY }}
cnb_registry_token: ${{ secrets.CNB_REGISTRY_RELEASE_BOT_GITHUB_TOKEN }}
docker_hub_user: ${{ secrets.DOCKER_HUB_USER }}
docker_hub_token: ${{ secrets.DOCKER_HUB_TOKEN }}
5 changes: 5 additions & 0 deletions buildpack.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,8 @@ id = "*"

[[buildpack.licenses]]
type = "BSD-3-Clause"

[metadata]
[metadata.release]
[metadata.release.image]
repository = "docker.io/heroku/procfile-cnb"
edmorley marked this conversation as resolved.
Show resolved Hide resolved