Release Automation (#1254)

* new GH actions for release automation

* updated Xcode version for macOS

* updated actions

* added pull request trigger [no-ci]

* adjusted pull_request requirement for actions [no-ci]

* fixed build errors for release builds

* added libcurl4 dependency

* added custom swift installation for lcurl issue

* enabled fat binary for macOS release build

* fixed typo

* removed redundant spaces

* fixed wrong reference

* updated actions for ubuntu

* fixed folder paths

* fixed typo

* debug - print build_dir

* fixed build path for linux

* fixed path for release binary

* attempt to build on aarch64

* removed attempt for aarch64

* changed event type release created for artifacts

* excluded *_Linux.swift files from documentation

* added jazzy action

* renamed actions

* added test  dependencies for release jobs

* removed pull_request trigger for jazzy

* added missing jazzy dependency

* allow test actions to be called

* adjusted workflow name

* testing

* renamed release filename for ubuntu

* disabled workflow_run for test

* disabled on tags for testing

* disabled check for test

* removed apostrophes

* added ls for test

* test generating docs

* fixed wrong variable

* added job dependency

* fixed wrong copy

* install tac

* exported variables between steps

* migrated docs job into build

* debugging ls

* test run

* debug ls

* renamed archive file

* moved final archive to ~

* moved files to ~

* flatten archive on ubuntu

* flattened archives; fixed artifactbundle

* changed packaging

* removed redundant mv

* fixed typo

* replaced mv with cp

* last test with docset

* added missing jazzy setup

* changed attributes for compiled binary

* compressing before packaging

* removed test triggers

* enabled tests for PRs

* renamed file
This commit is contained in:
Ruslan Alikhamov
2024-01-15 14:14:13 -05:00
committed by GitHub
parent 5856e3b652
commit 38a6731dee
8 changed files with 234 additions and 59 deletions
-50
View File
@@ -1,50 +0,0 @@
# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: Ubuntu (Experimental)
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
linux_build:
runs-on: ubuntu-latest
steps:
# - name: Setup Swift
# # You may pin to the exact commit or the version.
# # uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf
# uses: swift-actions/setup-swift@v1.23.0
# with:
# # Swift version to configure
# swift-version: 5.9 # default is 5.8
- name: Setup Swift environment for macOS, Linux and Windows
uses: SwiftyLab/setup-swift@v1.4.1
with:
swift-version: "5.9"
- name: Get swift version
run: swift --version
- uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@ec02537da5712d66d4d50a0f33b7eb52773b5ed1
with:
ruby-version: '3.1'
- name: Install dependencies
run: |
sudo apt install libffi-dev
sudo apt install build-essential
sudo apt install libsqlite3-dev
sudo apt-get install libncurses5-dev
shell: bash
- name: Bundle Install
run: bundle install
- name: Swift Build
run: swift build
- name: Run tests
run: swift test
@@ -1,3 +1,5 @@
name: Bump Homebrew formula
on:
workflow_dispatch:
inputs:
+42
View File
@@ -0,0 +1,42 @@
# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: rake docs
on:
workflow_dispatch:
inputs:
ref:
description: 'Ref to build (branch, tag or SHA)'
required: false
default: 'master'
push:
branches: [ "master" ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
update_docs:
runs-on: macos-13
steps:
- name: Set Xcode 15.1.0
run: sudo xcode-select -s /Applications/Xcode_15.1.0.app/Contents/Developer
- name: Print Current Xcode
run: xcode-select -p
- uses: actions/checkout@v3
- name: Update Docs
run: |
brew install coreutils
brew install sourcekitten
bundle install
rake docs
- uses: EndBug/add-and-commit@v9.1.3
with:
add: '.'
message: 'Update Docs'
committer_name: GitHub Actions
committer_email: actions@github.com
+98
View File
@@ -0,0 +1,98 @@
name: release macOS
on:
workflow_run:
workflows: [test macOS]
types:
- completed
workflow_dispatch:
inputs:
ref:
description: 'Ref to build (branch, tag or SHA)'
required: false
default: 'master'
push:
tags:
- '*'
jobs:
build:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
name: Build Sourcery for macOS
runs-on: macos-13
steps:
- name: Set Xcode 15.1.0
run: sudo xcode-select -s /Applications/Xcode_15.1.0.app/Contents/Developer
- name: Print Current Xcode
run: xcode-select -p
- uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref }}
- name: Build it
id: build
run: |
brew install coreutils
brew install sourcekitten
bundle install
rake docs
CLI_DIR="${HOME}/cli/"
RESOURCES_DIR="${CLI_DIR}Resources/"
TEMPLATES_DIR="${CLI_DIR}Templates/"
BUILD_DIR="${HOME}/build/"
BIN_DIR="${CLI_DIR}bin/"
ARTIFACT_BUNDLE_PATH="${HOME}/artifactbundle/"
path_to_sourcery_binary="${BIN_DIR}/sourcery"
mkdir -p $BIN_DIR
mkdir -p $RESOURCES_DIR
mkdir -p $TEMPLATES_DIR
mkdir -p ${ARTIFACT_BUNDLE_PATH}bin
cp -r docs/docsets/Sourcery.docset $CLI_DIR
cp -r "Templates/Templates/" $TEMPLATES_DIR
cp Resources/daemon.gif $RESOURCES_DIR
cp Resources/icon-128.png $RESOURCES_DIR
cp CHANGELOG.md $CLI_DIR
cp README.md $CLI_DIR
cp LICENSE $CLI_DIR
cp -r SourceryJS/Resources/ejs.js $BIN_DIR
cp -r $CLI_DIR/ "${ARTIFACT_BUNDLE_PATH}sourcery"
cp Templates/artifactbundle.info.json.template ${ARTIFACT_BUNDLE_PATH}/info.json
swift build --disable-sandbox -c release --arch arm64 --build-path $BUILD_DIR
swift build --disable-sandbox -c release --arch x86_64 --build-path $BUILD_DIR
lipo -create -output $path_to_sourcery_binary ${BUILD_DIR}arm64-apple-macosx/release/sourcery ${BUILD_DIR}x86_64-apple-macosx/release/sourcery
strip -rSTX ${path_to_sourcery_binary}
cp $path_to_sourcery_binary "${ARTIFACT_BUNDLE_PATH}sourcery/bin/"
pushd $CLI_DIR
TAG=$GITHUB_REF_NAME
FILENAME="sourcery-$TAG.zip"
zip -r -X $FILENAME .
mv $FILENAME "${HOME}/"
popd
pushd $ARTIFACT_BUNDLE_PATH
sed -i '' "s/VERSION/${TAG}/g" ${ARTIFACT_BUNDLE_PATH}/info.json
ARTIFACTBUNDLENAME=$FILENAME.artifactbundle.zip
zip -r -X $ARTIFACTBUNDLENAME .
mv $ARTIFACTBUNDLENAME "${HOME}/"
popd
echo "FILENAME=${FILENAME}" >> $GITHUB_OUTPUT
echo "ARTIFACTBUNDLENAME=${ARTIFACTBUNDLENAME}" >> $GITHUB_OUTPUT
- name: 'Upload Sourcery Artifact'
uses: actions/upload-artifact@v3
with:
name: ${{ steps.build.outputs.FILENAME }}
path: "~/${{ steps.build.outputs.FILENAME }}"
retention-days: 5
- name: 'Upload Bundle Artifact'
uses: actions/upload-artifact@v3
with:
name: ${{ steps.build.outputs.ARTIFACTBUNDLENAME }}
path: "~/${{ steps.build.outputs.ARTIFACTBUNDLENAME }}"
retention-days: 5
+58
View File
@@ -0,0 +1,58 @@
name: release ubuntu
on:
workflow_run:
workflows: [test ubuntu]
types:
- completed
workflow_dispatch:
inputs:
ref:
description: 'Ref to build (branch, tag or SHA)'
required: false
default: 'master'
push:
tags:
- '*'
jobs:
build:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
name: Build Sourcery for Ubuntu (latest)
runs-on: ubuntu-latest
outputs:
filename: ${{ steps.build.outputs.filename }}
steps:
- uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref }}
- name: Setup Swift
uses: swift-actions/setup-swift@v1.26.0
with:
swift-version: "5.9.2"
- name: Build it
id: build
run: |
BUILD_DIR="${HOME}/build/"
swift build --disable-sandbox -c release --build-path $BUILD_DIR
mv "${BUILD_DIR}x86_64-unknown-linux-gnu/release/sourcery" "${BUILD_DIR}/sourcery"
UNAME=$(uname -m)
CODENAME=$(lsb_release -c -s)
DESCRIPTION=$(lsb_release -d -s | sed "s/ /-/g" | sed "s/./\L&/g")
SUFFIX=$DESCRIPTION-$CODENAME-$UNAME
TAG=$GITHUB_REF_NAME
FILENAME="sourcery-${TAG}-${SUFFIX}.tar.xz"
pushd $BUILD_DIR
tar -zcvf $FILENAME sourcery
mv $FILENAME "${HOME}/"
popd
echo "FILENAME=${FILENAME}" >> $GITHUB_OUTPUT
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: ${{ steps.build.outputs.FILENAME }}
path: "~/${{ steps.build.outputs.FILENAME }}"
retention-days: 5
@@ -1,9 +1,10 @@
# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: macOS
name: test macOS
on:
workflow_call:
push:
branches: [ "master" ]
pull_request:
@@ -17,17 +18,11 @@ jobs:
macos_build:
runs-on: macos-13
steps:
- name: Set Xcode 14.3.1
run: sudo xcode-select -s /Applications/Xcode_14.3.1.app/Contents/Developer
#- name: Set Xcode 15.0 Beta
# run: sudo xcode-select -s /Applications/Xcode_15.0.app/Contents/Developer
- name: Set Xcode 15.1.0
run: sudo xcode-select -s /Applications/Xcode_15.1.0.app/Contents/Developer
- name: Print Current Xcode
run: xcode-select -p
- uses: actions/checkout@v3
- name: Bundle Install
run: bundle install
- name: Swift Build
run: swift build
- name: Run tests
run: swift test
+29
View File
@@ -0,0 +1,29 @@
# This workflow will build a Swift project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift
name: test ubuntu
on:
workflow_call:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }}
jobs:
linux_build:
runs-on: ubuntu-latest
steps:
- name: Setup Swift
uses: swift-actions/setup-swift@v1.26.0
with:
swift-version: "5.9.2"
- name: Get swift version
run: swift --version
- uses: actions/checkout@v3
- name: Run tests
run: swift test
+1
View File
@@ -6,6 +6,7 @@ github_url: https://github.com/krzysztofzablocki/Sourcery
copyright: 'Copyright © 2016-2021 Pixle. All rights reserved.'
readme: About.md
documentation: guides/*.md
exclude: ["*_Linux.swift"]
custom_categories:
- name: Guides