Skip to content

Features:

Features: #11

Workflow file for this run

name: Release

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

View workflow run for this annotation

GitHub Actions / .github/workflows/release.yml

Invalid workflow file

(Line: 201, Col: 9): 'env' is already defined
on:
push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+'
workflow_dispatch:
inputs:
tag:
description: 'Tag to build (e.g. v1.1.0)'
required: true
permissions:
contents: write
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Run tests
run: ./gradlew test
build-linux:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Verify version matches tag
run: |
GRADLE_VER=$(grep '^version = ' build.gradle.kts | sed 's/version = "\(.*\)"/\1/')
TAG_VER=${GITHUB_REF_NAME#v}
if [ "${GRADLE_VER}" != "${TAG_VER}" ]; then
echo "Tag ${GITHUB_REF_NAME} does not match build.gradle.kts version ${GRADLE_VER}"
exit 1
fi
- name: Build native image
run: ./gradlew nativeCompile
- name: Smoke test
run: |
./build/native/nativeCompile/localdevstack --service go --database postgres --output /tmp/s1 --name t
test -f /tmp/s1/service/main.go && test -f /tmp/s1/docker-compose.yml
mkdir /tmp/ex && echo 'module test' > /tmp/ex/go.mod
./build/native/nativeCompile/localdevstack --existing-dir /tmp/ex --database postgres
test -f /tmp/ex/Dockerfile.dev && test -f /tmp/ex/docker-compose.yml
- name: Package artifact
run: |
VERSION=${GITHUB_REF_NAME#v}
cp build/native/nativeCompile/localdevstack localdevstack-linux-x64
tar czf localdevstack-${VERSION}-linux-x64.tar.gz localdevstack-linux-x64
sha256sum localdevstack-${VERSION}-linux-x64.tar.gz > localdevstack-${VERSION}-linux-x64.tar.gz.sha256
- uses: actions/upload-artifact@v4
with:
name: linux-x64
path: localdevstack-*-linux-x64.tar.gz*
build-macos-x64:
needs: test
runs-on: macos-13
steps:
- uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Build native image
run: ./gradlew nativeCompile
- name: Smoke test
run: |
./build/native/nativeCompile/localdevstack --service go --database postgres --output /tmp/s1 --name t
test -f /tmp/s1/service/main.go
- name: Package artifact
run: |
VERSION=${GITHUB_REF_NAME#v}
cp build/native/nativeCompile/localdevstack localdevstack-macos-x64
tar czf localdevstack-${VERSION}-macos-x64.tar.gz localdevstack-macos-x64
shasum -a 256 localdevstack-${VERSION}-macos-x64.tar.gz > localdevstack-${VERSION}-macos-x64.tar.gz.sha256
- uses: actions/upload-artifact@v4
with:
name: macos-x64
path: localdevstack-*-macos-x64.tar.gz*
build-macos-arm64:
needs: test
runs-on: macos-14
steps:
- uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Build native image
run: ./gradlew nativeCompile
- name: Smoke test
run: |
./build/native/nativeCompile/localdevstack --service go --database postgres --output /tmp/s1 --name t
test -f /tmp/s1/service/main.go
- name: Package artifact
run: |
VERSION=${GITHUB_REF_NAME#v}
cp build/native/nativeCompile/localdevstack localdevstack-macos-arm64
tar czf localdevstack-${VERSION}-macos-arm64.tar.gz localdevstack-macos-arm64
shasum -a 256 localdevstack-${VERSION}-macos-arm64.tar.gz > localdevstack-${VERSION}-macos-arm64.tar.gz.sha256
- uses: actions/upload-artifact@v4
with:
name: macos-arm64
path: localdevstack-*-macos-arm64.tar.gz*
build-windows:
needs: test
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- uses: graalvm/setup-graalvm@v1
with:
java-version: '21'
distribution: 'graalvm-community'
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Build native image
run: ./gradlew nativeCompile
- name: Package artifact
shell: pwsh
run: |
$VERSION = $env:GITHUB_REF_NAME -replace '^v', ''
Copy-Item build/native/nativeCompile/localdevstack.exe localdevstack-windows-x64.exe
Compress-Archive localdevstack-windows-x64.exe "localdevstack-${VERSION}-windows-x64.zip"
$hash = (Get-FileHash "localdevstack-${VERSION}-windows-x64.zip" -Algorithm SHA256).Hash.ToLower()
"${hash} localdevstack-${VERSION}-windows-x64.zip" | Out-File -Encoding utf8 "localdevstack-${VERSION}-windows-x64.zip.sha256"
- uses: actions/upload-artifact@v4
with:
name: windows-x64
path: localdevstack-*-windows-x64.zip*
publish:
needs: [build-linux, build-macos-x64, build-macos-arm64, build-windows]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
merge-multiple: true
path: dist/
- name: Publish to distribution repo
env:
DIST_TOKEN: ${{ secrets.DIST_TOKEN }}
run: |
VERSION=${GITHUB_REF_NAME#v}
# Create release in the public distribution repo
gh release create "$GITHUB_REF_NAME" \
--repo krishgok/localdevstack \
--title "LocalDevelopmentStack v${VERSION}" \
--generate-notes \
dist/*
# Update Homebrew formula
SHA_ARM64=$(cat dist/localdevstack-${VERSION}-macos-arm64.tar.gz.sha256 | awk '{print $1}')
SHA_X64=$(cat dist/localdevstack-${VERSION}-macos-x64.tar.gz.sha256 | awk '{print $1}')
SHA_LINUX=$(cat dist/localdevstack-${VERSION}-linux-x64.tar.gz.sha256 | awk '{print $1}')
git clone https://x-access-token:${DIST_TOKEN}@github.com/krishgok/localdevstack.git dist-repo/
cd dist-repo
sed -i "s/version \".*\"/version \"${VERSION}\"/" Formula/localdevstack.rb
sed -i "s|url \".*macos-arm64.*\"|url \"https://github.com/krishgok/localdevstack/releases/download/v${VERSION}/localdevstack-${VERSION}-macos-arm64.tar.gz\"|" Formula/localdevstack.rb
sed -i "s/sha256 \".*\" # arm64/sha256 \"${SHA_ARM64}\" # arm64/" Formula/localdevstack.rb
sed -i "s|url \".*macos-x64.*\"|url \"https://github.com/krishgok/localdevstack/releases/download/v${VERSION}/localdevstack-${VERSION}-macos-x64.tar.gz\"|" Formula/localdevstack.rb
sed -i "s/sha256 \".*\" # x64/sha256 \"${SHA_X64}\" # x64/" Formula/localdevstack.rb
sed -i "s|url \".*linux-x64.*\"|url \"https://github.com/krishgok/localdevstack/releases/download/v${VERSION}/localdevstack-${VERSION}-linux-x64.tar.gz\"|" Formula/localdevstack.rb
sed -i "s/sha256 \".*\" # linux-x64/sha256 \"${SHA_LINUX}\" # linux-x64/" Formula/localdevstack.rb
# Update Scoop manifest
SHA_WIN=$(cat ../dist/localdevstack-${VERSION}-windows-x64.zip.sha256 | awk '{print $1}')
python3 -c "
import json
with open('bucket/localdevstack.json') as f: m = json.load(f)
m['version'] = '${VERSION}'
m['architecture']['64bit']['url'] = 'https://github.com/krishgok/localdevstack/releases/download/v${VERSION}/localdevstack-${VERSION}-windows-x64.zip'
m['architecture']['64bit']['hash'] = '${SHA_WIN}'
with open('bucket/localdevstack.json', 'w') as f: json.dump(m, f, indent=2)
print('Updated Scoop manifest')
"
git config user.email "release-bot@localdevstack.io"
git config user.name "Release Bot"
git add Formula/localdevstack.rb bucket/localdevstack.json
git commit -m "localdevstack v${VERSION}"
git push
env:
GH_TOKEN: ${{ secrets.DIST_TOKEN }}