-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Deploy from CI
committed
Oct 30, 2023
0 parents
commit c3c446f
Showing
50 changed files
with
7,196 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,236 @@ | ||
--- | ||
name: Release | ||
|
||
on: | ||
push: | ||
tags: | ||
- 'v*' | ||
|
||
jobs: | ||
# Allow our jobs to block on validation steps | ||
validation_rust: | ||
uses: ./.github/workflows/validation-rust.yaml | ||
|
||
validation_py: | ||
uses: ./.github/workflows/validation-python.yaml | ||
|
||
rust_release: | ||
name: "build & deploy ${{ matrix.build }} binaries" | ||
needs: [validation_rust, validation_py] | ||
runs-on: ${{ matrix.os }} | ||
strategy: | ||
matrix: | ||
include: | ||
- build: linux | ||
os: ubuntu-latest | ||
target: x86_64-unknown-linux-gnu | ||
# target: x86_64-unknown-linux-musl | ||
extension: '' | ||
# Unsuccessful compilation; try on local | ||
# - build: linux-arm | ||
# os: ubuntu-latest | ||
# target: arm-unknown-linux-gnueabihf | ||
# extension: '' | ||
- build: macos | ||
os: macos-latest | ||
target: x86_64-apple-darwin | ||
extension: '' | ||
- build: windows-msvc | ||
os: windows-latest | ||
target: x86_64-pc-windows-msvc | ||
extension: .exe | ||
env: | ||
CARGO: cargo | ||
TARGET_DIR: ./target | ||
TARGET_FLAGS: "" | ||
|
||
steps: | ||
# Retreive git files | ||
- uses: actions/checkout@v3 | ||
- uses: dtolnay/rust-toolchain@stable | ||
with: | ||
targets: ${{ matrix.target }} | ||
- uses: Swatinem/rust-cache@v2 | ||
# Debugging aid | ||
- name: Show commands | ||
run: | | ||
echo pwd: | ||
pwd | ||
echo ls: | ||
ls | ||
echo "cargo command is: ${{ env.CARGO }}" | ||
echo "target flag is: ${{ env.TARGET_FLAGS }}" | ||
echo "target dir is: ${{ env.TARGET_DIR }}" | ||
# Perform build | ||
- name: Build binary | ||
uses: actions-rs/cargo@v1 | ||
with: | ||
command: build | ||
# We only want to build zspell-cli, not plain zspell or zspell-py (does not support cdylib) | ||
args: --package zspell-cli --release --verbose --target ${{ matrix.target }} | ||
- name: Show output | ||
run: | | ||
ls target | ||
ls "target/${{ matrix.target }}" | ||
ls "target/${{ matrix.target }}/release" | ||
# Create .zip or .tar.gz file | ||
- name: Build archive | ||
shell: bash | ||
run: | | ||
echo '\nWorking directory:' && pwd | ||
echo '\nls:' && ls | ||
# outdir="$(ci/cargo-out-dir "${{ env.TARGET_DIR }}")" | ||
# outdir=target/release/${{ steps.get_repository_name.outputs.REPOSITORY_NAME }}${{ matrix.extension }} | ||
# Find the output directory with the latest timestamp | ||
cargo_outdir="$(find "${{ env.TARGET_DIR }}" -name zspell-stamp -print0 | xargs -0 ls -t | head -n1 | xargs dirname)" | ||
ref_name=${GITHUB_REF##*/} | ||
# Remove leading 'v' for use where needed | ||
ref_name_stripped=$(echo $ref_name | perl -0pe 's/^v//') | ||
echo "\nRef name: \"$ref_name\"" | ||
echo "\nRef name stripped: \"$ref_name_stripped\"" | ||
staging="zspell-$ref_name-${{ matrix.target }}" | ||
mkdir -p "$staging"/{completion,doc} | ||
# Remove the "unreleased" section from our changelog | ||
perl -0777 -i -pe "s/(<\!-- next-header -->.*## \[Unreleased\].*?\n)(?=## |<\!--)//gms" CHANGELOG.md | ||
cp {README.md,LICENSE} "$staging/" | ||
cp CHANGELOG.md "$staging/doc/" | ||
cp "$cargo_outdir"/zspell.1 "$staging/doc" | ||
cp "$cargo_outdir"/{_zspell,_zspell.ps1,zspell.bash,zspell.elv,zspell.fish} "$staging/completion" | ||
# Build RNOTES.md, which we will use for our Github release (not shipped in zip) | ||
# Select the release notes from our latest version only | ||
perl -0777 -ne "print /(## \[$ref_name_stripped\].*?\n)(?=\n*^(?:## |<\!--))/gms" CHANGELOG.md > RNOTES.md | ||
# Select the diff URL for this version only | ||
perl -0777 -ne "print /\n\[$ref_name_stripped\]:.*?\n/gms" CHANGELOG.md >> RNOTES.md | ||
echo "Release notes:" && cat RNOTES.md | ||
if [ "${{ matrix.os }}" = "windows-latest" ]; then | ||
cp "target/${{ matrix.target }}/release/zspell.exe" "$staging/" | ||
7z a "$staging.zip" "$staging" | ||
echo "ASSET=$staging.zip" >> $GITHUB_ENV | ||
else | ||
cp "target/${{ matrix.target }}/release/zspell" "$staging/" | ||
tar czf "$staging.tar.gz" "$staging" | ||
echo "ASSET=$staging.tar.gz" >> $GITHUB_ENV | ||
fi | ||
# Upload to github | ||
- name: Release | ||
uses: softprops/action-gh-release@v1 | ||
if: startsWith(github.ref, 'refs/tags/') | ||
env: | ||
GITHUB_REPOSITORY: pluots/zspell | ||
with: | ||
body_path: RNOTES.md | ||
# note you'll typically need to create a personal access token | ||
# with permissions to create releases in the other repo | ||
token: ${{ secrets.GITHUB_TOKEN }} | ||
files: | | ||
${{ env.ASSET }} | ||
linux_wheels: | ||
runs-on: ubuntu-latest | ||
needs: [validation_rust, validation_py] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: build libc wheels | ||
uses: messense/maturin-action@v1 | ||
with: | ||
manylinux: auto | ||
command: build | ||
# container default is manylinux | ||
args: --release -o dist -i 3.7 3.8 3.9 3.10 3.11 3.12 --manifest-path zspell-py/Cargo.toml | ||
- name: build musl wheels | ||
uses: messense/maturin-action@v1 | ||
with: | ||
target: x86_64-unknown-linux-musl | ||
manylinux: musllinux_1_1 | ||
command: build | ||
args: --release -o dist -i 3.7 3.8 3.9 3.10 3.11 3.12 --manifest-path zspell-py/Cargo.toml | ||
- name: upload wheels | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: dist | ||
|
||
windows_wheels: | ||
runs-on: windows-latest | ||
needs: [validation_rust, validation_py] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: messense/maturin-action@v1 | ||
with: | ||
command: build | ||
# FIXME: python 3.12 not yet available on windows runners | ||
args: --release -o dist -i 3.7 3.8 3.9 3.10 3.11 --manifest-path zspell-py/Cargo.toml | ||
- name: upload wheels | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: dist | ||
|
||
macos_wheels: | ||
runs-on: macos-latest | ||
needs: [validation_rust, validation_py] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: messense/maturin-action@v1 | ||
with: | ||
command: build | ||
args: --release -o dist -i 3.7 3.8 3.9 3.10 3.11 3.12 --universal2 --manifest-path zspell-py/Cargo.toml | ||
- name: upload wheels | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: wheels | ||
path: dist | ||
|
||
release_all_wheels: | ||
name: Release wheels | ||
runs-on: ubuntu-latest | ||
needs: [linux_wheels, macos_wheels, windows_wheels] | ||
steps: | ||
- uses: actions/download-artifact@v2 | ||
with: | ||
name: wheels | ||
- name: Publish to PyPI | ||
uses: messense/maturin-action@v1 | ||
env: | ||
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | ||
with: | ||
command: upload | ||
args: --skip-existing * | ||
|
||
deploy_book: | ||
runs-on: ubuntu-latest | ||
needs: [validation_rust, validation_py] | ||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
fetch-depth: 0 | ||
- name: Install mdbook | ||
run: | | ||
mkdir mdbook | ||
curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz \ | ||
| tar -xz --directory=./mdbook | ||
echo `pwd`/mdbook >> $GITHUB_PATH | ||
- name: Deploy GitHub Pages | ||
run: | | ||
# This assumes your book is in the root of your repository. | ||
# Just add a `cd` here if you need to change to another directory. | ||
mdbook build | ||
git worktree add gh-pages | ||
git config user.name "Deploy from CI" | ||
git config user.email "" | ||
cd gh-pages | ||
# Delete the ref to avoid keeping history. | ||
git update-ref -d refs/heads/gh-pages | ||
rm -rf * | ||
mv ../book/* . | ||
git add . | ||
git commit -m "Deploy $GITHUB_SHA to gh-pages" | ||
git push --force --set-upstream origin gh-pages |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
name: Python Validation | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
workflow_call: # allow this to be run from other workflows | ||
|
||
jobs: | ||
verify: | ||
name: pytest | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/cache@v3 | ||
with: | ||
path: ~/.local/share/virtualenvs | ||
key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }} | ||
- uses: dtolnay/rust-toolchain@stable | ||
- uses: Swatinem/rust-cache@v2 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.11' | ||
- name: Install pipenv | ||
run: python -m pip install --upgrade pipenv wheel | ||
- name: Install dependencies | ||
run: | | ||
pipenv install --dev | ||
pipenv run maturin develop --manifest-path zspell-py/Cargo.toml | ||
- name: Pytest | ||
run: pipenv run pytest | ||
- name: Validate docs | ||
run: pipenv run make -C zspell-py/docs html |
Oops, something went wrong.