Skip to content

0.12.2

0.12.2 #61

Workflow file for this run

# This workflow runs on tags / releases. It also runs on nightly builds without
# publishing anything, in order to test as much of the build works as possible.
#
# We indicate whether it should publish, vs. just build, by checking whether
# `github.event_name == 'release'` . (An alternative would be to have an input
# which is passed in by the calling workflow.)
name: release
on:
release:
types: [released]
workflow_call:
workflow_dispatch:
jobs:
brew-dispatcher:
name: Release on homebrew-prql
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- uses: actions/github-script@v7
with:
github-token: ${{ secrets.PRQL_BOT_GITHUB_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: 'prql',
repo: 'homebrew-prql',
workflow_id: 'update.yaml',
ref: 'main',
inputs: {
version: '${{ github.ref }}',
URL: 'https://github.com/PRQL/prql/archive/${{ github.ref }}.tar.gz'
}
})
build-prqlc:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
- os: macos-14
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
permissions:
contents: write
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- uses: ./.github/actions/build-prqlc
id: build-artifact
with:
target: ${{ matrix.target }}
profile: release
features: cli
- name: Upload release artifact
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
append_body: true
files: ${{ steps.build-artifact.outputs.artifact-name }}
- name: test the CLI works
# TODO: Add for Windows too (but will require unzipping rather than
# un-taring)
#
# Currently filtering by x86, since that's the same as those not
# cross-compiled. But we'll have to refine this in the future.
if:
${{ contains(matrix.target, 'x86') && matrix.target !=
'x86_64-pc-windows-msvc' }}
run: |
# `prqlc` is an existing path at the root
mkdir -p temp_path
tar xzf ${{ steps.build-artifact.outputs.artifact-name }} -C temp_path
./temp_path/prqlc --help
build-prqlc-c:
# Mostly a copy/paste of `build-prqlc`.
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
- os: macos-14
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
permissions:
contents: write
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- uses: ./.github/actions/build-prqlc-c
id: build-artifact
with:
target: ${{ matrix.target }}
profile: release
- name: Upload release artifact
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
append_body: true
files: ${{ steps.build-artifact.outputs.artifact-name }}
publish-winget:
runs-on: ubuntu-latest
needs: build-prqlc
if: github.event_name == 'release'
steps:
- name: publish
uses: vedantmgoyal2009/winget-releaser@v2
with:
identifier: PRQL.prqlc
version: ${{ github.ref_name }}
installers-regex: '^prqlc-.*-windows-.*\.zip$'
token: ${{ secrets.PRQL_BOT_GITHUB_TOKEN }}
fork-user: prql-bot
build-deb-package:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-musl
needs: build-prqlc
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: prqlc-${{ matrix.target }}-release
- name: Copy files into .deb package
run: |
tar -xf prqlc-*.tar.gz
mkdir -p .debpkg/usr/bin
mv prqlc .debpkg/usr/bin/prqlc
chmod +x .debpkg/usr/bin/prqlc
- name: Set arch variable
run: |
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-musl" ]; then
echo "package_arch=arm64" >> "$GITHUB_ENV"
elif [ "${{ matrix.target }}" == "x86_64-unknown-linux-musl" ]; then
echo "package_arch=amd64" >> "$GITHUB_ENV"
else
echo "::error::Unknown architecture: ${{ matrix.target }}"
exit 1
fi
- name: 📦 Build .deb package
uses: jiro4989/build-deb-action@v3
with:
package: prqlc
package_root: .debpkg
maintainer: The PRQL Project
version: ${{ github.event_name == 'release' && github.ref_name || 0 }}
arch: ${{ env.package_arch }}
desc: >
prqlc is the CLI for the PRQL compiler. It compiles PRQL to SQL, and
offers various diagnostics.
PRQL is a modern language for transforming data — a simple,
powerful, pipelined SQL replacement.
- uses: actions/upload-artifact@v4
with:
name: deb-${{ matrix.target }}
path: ./*.deb
- name: Release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: prqlc_*.deb
build-rpm-package:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-musl
#- aarch64-unknown-linux-musl # https://github.com/jiro4989/build-rpm-action/issues/6
needs: build-prqlc
permissions:
contents: write
steps:
- uses: actions/download-artifact@v4
with:
name: prqlc-${{ matrix.target }}-release
- name: Copy files into .rpm package
run: |
tar -xf prqlc-*.tar.gz
mkdir -p .rpmpkg/usr/bin
mv prqlc .rpmpkg/usr/bin/prqlc
chmod +x .rpmpkg/usr/bin/prqlc
- name: Set variables
run: |
if [ "${{ matrix.target }}" == "aarch64-unknown-linux-musl" ]; then
echo "package_arch=aarch64" >> "$GITHUB_ENV"
elif [ "${{ matrix.target }}" == "x86_64-unknown-linux-musl" ]; then
echo "package_arch=x86_64" >> "$GITHUB_ENV"
else
echo "::error::Unknown architecture: ${{ matrix.target }}"
fi
- name: 📦 Build .rpm package
uses: jiro4989/build-rpm-action@v2
with:
summary: CLI for PRQL, a modern language for transforming data
package: prqlc
package_root: .rpmpkg
maintainer: The PRQL Project
vendor: The PRQL Project
version: ${{ github.event_name == 'release' && github.ref_name || 0 }}
arch: ${{ env.package_arch }}
desc: >
prqlc is the CLI for the PRQL compiler. It compiles PRQL to SQL, and
offers various diagnostics.
PRQL is a modern language for transforming data — a simple,
powerful, pipelined SQL replacement.
license: Apache-2.0
- uses: actions/upload-artifact@v4
with:
name: artifact-rpm
path: |
./*.rpm
!./*-debuginfo-*.rpm
- run: rm prqlc-debuginfo-*.rpm
- name: Release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
with:
files: prqlc-*.rpm
build-and-publish-snap:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'release' }}
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- name: Move Snap to project root directory
run: cp -r prqlc/packages/snap/ .
- name: 📦 Build Snap
id: build
uses: snapcore/action-build@v1
- name: 🆙 Publish Snap
if: github.event_name == 'release'
uses: snapcore/action-publish@v1
env:
SNAPCRAFT_STORE_CREDENTIALS:
${{ secrets.SNAPCRAFT_STORE_CREDENTIALS }}
with:
snap: ${{ steps.build.outputs.snap }}
release: edge
build-python-wheels:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: true
matrix:
os: [ubuntu-latest, windows-latest]
package:
- prqlc-python
- lutra-python
target: [x86_64]
include:
# MacOS with universal builds
- os: macos-14
package: prqlc-python
target: universal2-apple-darwin
- os: macos-14
package: lutra-python
target: universal2-apple-darwin
# Also produce more targets for ubuntu:
- os: ubuntu-latest
package: prqlc-python
target: aarch64
- os: ubuntu-latest
package: prqlc-python
target: source
- os: ubuntu-latest
package: lutra-python
target: aarch64
- os: ubuntu-latest
package: lutra-python
target: source
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- uses: ./.github/actions/build-python
with:
target: ${{ matrix.target }}
package: ${{ matrix.package }}
profile: release
publish-python:
runs-on: ubuntu-latest
needs: [build-python-wheels]
if: github.event_name == 'release'
strategy:
matrix:
package:
- prqlc-python
- lutra-python
steps:
- uses: actions/download-artifact@v4
with:
# `*` covers target & OS
pattern: ${{ matrix.package }}-*-release
merge-multiple: true
- name: Publish to PyPI
uses: PyO3/maturin-action@v1
env:
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }}
with:
command: upload
args: --skip-existing *
publish-js:
runs-on: ubuntu-latest
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- uses: baptiste0928/cargo-install@v3
with:
crate: wasm-pack
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: "20.x"
registry-url: "https://registry.npmjs.org"
- run: ./.github/workflows/scripts/set_version.sh
- name: 💰 Cache
uses: Swatinem/rust-cache@v2
with:
prefix-key: ${{ env.version }}
# Share key with the `build-web` job
shared-key: web
save-if: false
# This is only required in order to have `cross-env` installed, since `npx
# cross-env` doesn't seem to work in CI (https://github.com/PRQL/prql/pull/3728)
- run: npm install
working-directory: prqlc/bindings/js/
- run:
npm publish ${{ (github.event_name != 'release') && '--dry-run' || ''
}}
working-directory: prqlc/bindings/js/
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
publish-to-cargo:
runs-on: ubuntu-latest
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- uses: baptiste0928/cargo-install@v3
with:
crate: cargo-release
# Currently, we can only check prqlc-ast which is not dependent other local crates with --dry-run.
# https://github.com/crate-ci/cargo-release/issues/691
# --no-verify is required to prevent build.
- run:
cargo release publish --no-confirm ${{ github.event_name == 'release'
&& '--execute' || '--no-verify --package prqlc-ast'}}
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
# Requires another pass: https://github.com/PRQL/prql/issues/850
# publish-prql-java:
# runs-on: ubuntu-latest
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
# - name: Install Java and Maven
# uses: actions/setup-java@v3
# with:
# java-version: 8
# - name: Release Maven package
# uses: samuelmeuli/action-maven-publish@v1
# with:
# gpg_private_key: ${{ secrets.gpg_private_key }}
# gpg_passphrase: ${{ secrets.gpg_passphrase }}
# nexus_username: ${{ secrets.nexus_username }}
# nexus_password: ${{ secrets.nexus_password }}
# directory: prql-java/java/
push-web-branch:
runs-on: ubuntu-latest
if: github.event_name == 'release'
steps:
- name: 📂 Checkout code
uses: actions/checkout@v4
- run: git push origin HEAD:web --force
push-devcontainer:
if: github.event_name == 'release'
uses: ./.github/workflows/build-devcontainer.yaml
with:
# TOOD: I think having this as a bool is OK, but check a recent release
# from 0.10.0 and confirm that it is indeed pushing the image.
push: true