Skip to content

WIP

WIP #56

Workflow file for this run

name: Release
on:
push:
tags:
- "v*"
jobs:
linux:
env:
TARGET_DIR: target/release
runs-on: ubuntu-latest
steps:
- name: Install latest nightly
uses: actions-rs/toolchain@v1
with:
toolchain: nightly
override: true
components: rustfmt, clippy
- uses: actions/checkout@v4
- name: Install cargo deb
uses: actions-rs/cargo@v1
with:
command: install
args: cargo-deb
- name: Build debian package
shell: bash
run: |
cargo deb -p teracli -o "tera-cli_linux_amd64.deb"
- name: Upload Linux artifacts
uses: actions/upload-artifact@v4
with:
name: linux
path: "tera-cli_linux_amd64.deb"
create_draft:
needs: ["linux", "macos"]

Check failure on line 40 in .github/workflows/release.yml

View workflow run for this annotation

GitHub Actions / Release

Invalid workflow file

The workflow is not valid. .github/workflows/release.yml (Line: 40, Col: 22): Job 'create_draft' depends on unknown job 'macos'. .github/workflows/release.yml (Line: 109, Col: 13): Job 'publish-binaries' depends on job 'create_draft' which creates a cycle in the dependency graph.
name: Create Draft
runs-on: ubuntu-latest
outputs:
release_url: ${{ steps.create-release.outputs.html_url }}
asset_upload_url: ${{ steps.create-release.outputs.upload_url }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Get Release Version
run: |
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
echo "SHORT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV
- uses: actions/download-artifact@v4
# TODO: here we could fetch the artifacts and reuse our freshest build.
- name: Install tera v0.1.0
run: |
URL=https://github.com/chevdor/tera-cli/releases/download/v0.1.0-ae9bc49c/tera-cli_linux_amd64.deb
wget $URL
sudo dpkg -i tera-cli_linux_amd64.deb
tera --version
- name: Generate changelog
id: change_log
# for the first command to work, we need to checkout with fetch-depth: 0
run: |
LAST_TAG=$(git describe --tags --abbrev=0 ${{ env.RELEASE_VERSION }}^ )
JSON=$(git log $LAST_TAG..HEAD \
--pretty=format:'{ "commit": "%H", "short_sha": "%h", "author": "%an", "date": "%ad", "message": "%s"},' \
$@ | \
perl -pe 'BEGIN{print "{ \"since\": \"'${LAST_TAG}'\", \"commits\": ["}; END{print "]}"}' | \
perl -pe 's/},]/}]/')
echo $JSON | tera --template templates/changelog.md --stdin > changelog.md
- name: Render release notes
run: |
x86_64_prefix='tera-cli-x86_64-'
export X86_64_GNU_TGZ="${x86_64_prefix}-unknown-linux-gnu.tar.gz"
export X86_64_MUSL_TGZ="${X86_64_GNU_TGZ//gnu/musl}"
export AARCH64_GNU_TGZ="${X86_64_GNU_TGZ//x86_64/aarch64}"
export AARCH64_MUSL_TGZ="${X86_64_MUSL_TGZ//x86_64/aarch64}"
export DEBIAN_URL="https://github.com/chevdor/tera-cli/releases/download/${{ env.RELEASE_VERSION }}/tera-cli_linux_amd64.deb"
export X86_64_MACOS_TGZ="${x86_64_prefix}-apple-darwin.tar.gz"
export AARCH64_MACOS_TGZ="${X86_64_MACOS_TGZ//x86_64/aarch64}"
export CHANGELOG=$(cat changelog.md)
tera --env --env-only --template templates/release.md > RELEASE_NOTES.md
env:
ARCHIVE_URL_PREFIX: ${{ github.server_url }}/${{ github.repository }}/releases/download/${{ env.RELEASE_VERSION }}/
WINDOWS_ZIP: tera-cli-x86_64-pc-windows-msvc.zip
- name: Create Release
id: create-release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.RELEASE_VERSION }}
release_name: Tera ${{ env.RELEASE_VERSION }} (${{ env.SHORT_SHA }})
body_path: ./RELEASE_NOTES.md
draft: true
publish-binaries:
runs-on: ubuntu-latest
needs: ["create_draft"]
steps:
- uses: actions/checkout@v4
- name: Get Release Version
run: |
echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
echo "SHORT_SHA=${GITHUB_SHA::8}" >> $GITHUB_ENV
- uses: actions/download-artifact@v4
- name: Upload Debian package
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ needs.create_draft.outputs.asset_upload_url }}
asset_path: "linux/tera-cli_linux_amd64.deb"
asset_name: "tera-cli_linux_amd64.deb"
asset_content_type: application/vnd.debian.binary-package
publish-linux-and-windowns-binaries:
needs: ["create_draft"]
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
- os: windows-latest
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Upload Binarise
uses: taiki-e/upload-rust-binary-action@v1
with:
bin: tera
target: ${{ matrix.target }}
archive: tera-cli-$target
checksum: sha512
token: ${{ secrets.GITHUB_TOKEN }}
publish-macos-binaries:
needs: ["create_draft"]
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Upload x86_64
uses: taiki-e/upload-rust-binary-action@v1
id: upload-x86_64
with:
bin: tera
target: x86_64-apple-darwin
archive: tera-cli-$target
# SHA256 is used for homebrew
# https://docs.brew.sh/Cask-Cookbook#stanza-sha256
checksum: sha256
token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload aarch64
uses: taiki-e/upload-rust-binary-action@v1
with:
bin: tera
target: aarch64-apple-darwin
archive: tera-cli-$target
checksum: sha512
token: ${{ secrets.GITHUB_TOKEN }}
- name: Add tera to PATH
run: |
mv "target/x86_64-apple-darwin/release/tera" /usr/local/bin
- name: Output values for Formula templates
id: output-values-for-templates
run: |
echo GITHUB_REF=$GITHUB_REF
RELEASE_VERSION=${GITHUB_REF#refs/*/}
RAW_VERSION=${RELEASE_VERSION:1}
echo "RAW_VERSION=$RAW_VERSION" >> $GITHUB_OUTPUT
echo ${{ github.ref_name }}
X86_64_SHA256="$(cut -d' ' -f1 ${{ steps.upload-x86_64.outputs.sha256 }})"
echo "X86_64_SHA256=$X86_64_SHA256" >> $GITHUB_OUTPUT
# We do that before hecking out master (in case we were not in master already)
- name: Prepare new Formula
env:
NAME: Tera
DESCRIPTION: "A command line utility written in Rust to render templates using the tera templating engine"
HOMEPAGE: ${{ github.server_url }}/${{ github.repository }}
REPO_URL: ${{ github.server_url }}/${{ github.repository }}
ARCHIVE: tera-cli-x86_64-apple-darwin.tar.gz
SHA256: ${{ steps.output-values-for-templates.outputs.X86_64_SHA256 }}
VERSION: ${{ steps.output-values-for-templates.outputs.RAW_VERSION }}
run: |
tera --version
tera --template templates/formula.rb --env-only > $HOME/tera.rb
cat $HOME/tera.rb
- name: Update Homebrew Formula
run: |
cp -f $HOME/tera.rb Formula/tera.rb
git config --global user.name 'TeraBot'
git config --global user.email '[email protected]'
git commit Formula/tera.rb -m "build: new homebrew formula for ${{ env.RELEASE_VERSION }}"