added macos-latest to ci #249
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Main | |
defaults: | |
run: | |
shell: bash | |
permissions: | |
contents: write | |
on: | |
push: | |
branches: [ "main" ] | |
pull_request: | |
branches: [ "*" ] | |
paths: | |
- "**" | |
- "!**.md" | |
jobs: | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out Git repository | |
uses: actions/checkout@v3 | |
- name: Set up .NET | |
uses: actions/setup-dotnet@v1 | |
with: | |
dotnet-version: "8.0.x" | |
- name: .NET Lint | |
uses: zyactions/dotnet-lint@v1 | |
with: | |
implicit-restore: true | |
workspace: sqlc-gen-csharp.sln | |
exclude: | | |
GeneratedProtobuf | |
MySqlConnectorExample | |
NpgsqlExample | |
ci: | |
name: CI | |
runs-on: ${{ matrix.os }} | |
if: ${{ always() }} | |
strategy: | |
matrix: | |
os: [ ubuntu-latest, macos-13 ] | |
architecture: [ "x64" ] # , "arm64" | |
dotnet-version: [ '8.0.x' ] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Load .env file | |
uses: xom9ikk/[email protected] | |
with: | |
load-mode: strict | |
- name: Setup Dotnet ${{ matrix.dotnet-version }} | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: ${{ matrix.dotnet-version }} | |
- name: Install Wasi workload | |
run: dotnet workload install wasi-experimental | |
- name: Download Wasi SDK on Ubuntu | |
if: runner.os == 'Linux' | |
run: | | |
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-22/wasi-sdk-22.0-linux.tar.gz | |
tar xf wasi-sdk-22.0-linux.tar.gz | |
chmod -R 755 wasi-sdk-22.0 | |
- name: Download Wasi SDK on MacOS | |
if: runner.os == 'macOS' | |
run: | | |
wget https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-22/wasi-sdk-22.0-macos.tar.gz | |
tar xf wasi-sdk-22.0-macos.tar.gz | |
chmod -R 755 wasi-sdk-22.0 | |
# name: Download WASI SDK on Windows | |
# run: | | |
# curl -LO https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-22/wasi-sdk-22.0.m-mingw.tar.gz | |
# tar xf wasi-sdk-22.0.m-mingw.tar.gz -C wasi-sdk-22.0 | |
# chmod -R 755 wasi-sdk-22.0 | |
- name: Dotnet Wasm Publish | |
run: | | |
WASI_SDK_PATH="$(pwd)/wasi-sdk-22.0" dotnet publish WasmRunner -c release | |
./scripts/wasm/copy_to_dist.sh | |
./scripts/wasm/update_sha.sh | |
- uses: sqlc-dev/setup-sqlc@v4 | |
with: | |
sqlc-version: '1.25.0' | |
- name: Verify pushed generated code is synced | |
run: sqlc -f sqlc.wasm.yaml diff | |
- name: Verify pushed Dockerfile is synced | |
run: | | |
./scripts/generate_dockerfile.sh /tmp/Dockerfile | |
diff /tmp/Dockerfile Dockerfile | |
- name: Sqlc generate using Wasm plugin | |
run: sqlc -f sqlc.wasm.yaml generate | |
# - name: Setup Docker support via Colima on MacOS | |
# if: runner.os == 'macOS' | |
# run: | | |
# set -x | |
# brew install docker docker-compose | |
# open -a $(which docker) | |
# sleep 4 | |
- name: Test generated code | |
run: | | |
docker-compose up -d | |
./scripts/run_tests.sh | |
- name: upload wasm plugin as artifact | |
uses: actions/upload-artifact@v2 | |
if: github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[release]') | |
with: | |
name: wasm-file | |
path: dist/plugin.wasm | |
release: | |
name: Release test | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, '[release]') | |
needs: [ci] | |
steps: | |
- name: Check out Git repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # fetches all history for all tags and branches | |
- uses: actions/download-artifact@v2 | |
with: | |
name: wasm-file | |
- name: Bump version and create new tag | |
id: bump_version | |
run: | | |
set -ex | |
echo "Extract the latest tag version" | |
LATEST_TAG=$(git describe --tags $(git rev-list --tags --max-count=1)) | |
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV | |
echo "latest tag version: $LATEST_TAG" | |
LATEST_COMMIT_MSG=$(git log -1 --pretty=%B) | |
BUMP_TYPE="patch" # Initialize the default version bump type to patch | |
if [[ $LATEST_COMMIT_MSG == *"[major]"* ]]; then | |
BUMP_TYPE="major" | |
elif [[ $LATEST_COMMIT_MSG == *"[minor]"* ]]; then | |
BUMP_TYPE="minor" | |
fi | |
# Bump the version based on the type | |
case $BUMP_TYPE in | |
"major") | |
NEW_TAG=$(echo $LATEST_TAG | awk -F. '{OFS="."; $1="v" substr($1,2)+1; $2="0"; $3="0"; print}') | |
;; | |
"minor") | |
NEW_TAG=$(echo $LATEST_TAG | awk -F. '{OFS="."; $2=$2+1; $3="0"; print}') | |
;; | |
"patch") | |
NEW_TAG=$(echo $LATEST_TAG | awk -F. '{OFS="."; $3=$3+1; print}') | |
;; | |
esac | |
echo "New tag version: $NEW_TAG" | |
echo "NEW_TAG=$NEW_TAG" >> $GITHUB_ENV | |
# Create a new tag | |
git tag $NEW_TAG | |
git push origin $NEW_TAG | |
- name: Calculate sha256 | |
run: | | |
SHA256_HASH=$(sha256sum plugin.wasm | awk '{ print $1 }') | |
echo "SHA256_HASH=$SHA256_HASH" >> $GITHUB_ENV | |
echo "The calculated sha256 is $SHA256_HASH" | |
- name: Create release draft | |
run: | | |
LATEST_TAG=${{ env.LATEST_TAG }} | |
NEW_TAG=${{ env.NEW_TAG }} | |
SHA256_HASH=${{ env.SHA256_HASH }} | |
PREVIOUS_TAG=$(git rev-list -n 1 $LATEST_TAG) | |
CHANGE_LOG=$(git --no-pager log $PREVIOUS_TAG..HEAD --pretty=format:'%h - %an, %ar : %s') | |
# Define the release notes template | |
RELEASE_NOTES=$(cat <<EOF | |
## Release version $NEW_TAG | |
Release sha256 is \`$SHA256_HASH\` | |
## Configuration example | |
\`\`\`yaml | |
version: '2' | |
plugins: | |
- name: csharp | |
wasm: | |
url: https://github.com/DaredevilOSS/sqlc-gen-csharp/releases/download/$NEW_TAG/sqlc-gen-csharp.wasm | |
sha256: $SHA256_HASH | |
\`\`\` | |
## Changelog | |
$CHANGE_LOG | |
## Contributors | |
* @doron050 @SockworkOrange | |
Anyone who wishes to contribute to the next releases is invited :) | |
EOF | |
) | |
# change file name to convention | |
mv plugin.wasm sqlc-gen-csharp.wasm | |
# Create a draft release | |
gh release create $NEW_TAG sqlc-gen-csharp.wasm \ | |
--draft \ | |
--title "$NEW_TAG" \ | |
--notes "$RELEASE_NOTES" | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |