-
Notifications
You must be signed in to change notification settings - Fork 46
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implementing GitHub Actions for Build and Deployment (#11)
* Setting up GitHub Actions workflow * Triggering GitHub Actions * Triggering GitHub Actions * Triggering GitHub Actions * Triggering GitHub Actions * Triggering GitHub Actions * Triggering GitHub Actions * Triggering GitHub Actions * Initial CI/CD working solution * Testing file output due to path length * Testing dynamic tagging * Testing upload paths on release * Testing upload paths on release * Testing upload paths on release * Testing upload paths on release * Testing upload paths on release * Testing upload paths on release * Testing upload paths on release * Testing release upload file name object * Testing release upload file with specific filenameobject * Testing release upload file with specific filenameobject * Testing release upload file with multiple specific filenames objects * GitHub Actions first working YAML automation version & Update workflow trigger to main branch --------- Co-authored-by: Rey Marrero <reymarrero@Reys-MacBook-Pro.local>
- Loading branch information
Showing
1 changed file
with
229 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,229 @@ | ||
# Name of the GitHub Actions workflow | ||
name: Build and Deploy | ||
|
||
# Trigger the workflow on push to the specified branch | ||
on: | ||
push: | ||
branches: | ||
- main | ||
|
||
# Define the jobs to be run | ||
jobs: | ||
# Define the build job | ||
build: | ||
# Specify the runner environment | ||
runs-on: macos-latest | ||
|
||
# Define the steps to be performed in the build job | ||
steps: | ||
# Add the target architecture for building MacOS Silicon apps | ||
- name: Add target architecture | ||
run: rustup target add aarch64-apple-darwin | ||
|
||
# Check out the repository code to the runner | ||
- name: Checkout code | ||
uses: actions/checkout@v4 | ||
|
||
# Set up the required Node.js version | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: '20.x' | ||
|
||
# Set up the Rust toolchain | ||
- name: Setup Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
profile: minimal | ||
toolchain: stable | ||
override: true | ||
|
||
# Check if there is a cache of the pnpm modules and restore it | ||
- name: Cache pnpm modules | ||
uses: actions/cache@v2 | ||
with: | ||
path: ~/.pnpm-store | ||
key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} | ||
restore-keys: | | ||
${{ runner.os }}-pnpm- | ||
# Install pnpm (a fast, disk space efficient package manager) | ||
- name: Install pnpm | ||
run: npm install -g pnpm | ||
|
||
# Install project dependencies | ||
- name: Install dependencies | ||
run: pnpm i | ||
|
||
# Build the project for MacOS Silicon | ||
- name: Build for MacOS Silicon | ||
run: pnpm build:app:silicon | ||
|
||
# Archive the MacOS Silicon build artifacts | ||
- name: Archive MacOS Silicon artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: macos-silicon | ||
# The current path is very specific and might need adjustments with any changes in the file name or structure. A more generalized path (e.g., src-tauri/target/release/bundle/dmg/*.dmg) would be preferable as it's more flexible and resilient to such changes. | ||
path: src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/*.dmg | ||
if-no-files-found: error # or 'warn' or 'ignore' | ||
|
||
# Build the project for MacOS Intel | ||
- name: Build for MacOS Intel | ||
run: pnpm build:app:intell | ||
|
||
# Archive the MacOS Intel build artifacts | ||
- name: Archive MacOS Intel artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: macos-intel | ||
# The current path is very specific and might need adjustments with any changes in the file name or structure. A more generalized path (e.g., src-tauri/target/release/bundle/dmg/*.dmg) would be preferable as it's more flexible and resilient to such changes. | ||
path: src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/*.dmg | ||
if-no-files-found: error # or 'warn' or 'ignore' | ||
|
||
# Build the project for MacOS Universal (both Silicon and Intel) | ||
- name: Build for MacOS Universal | ||
run: pnpm build:app:universal | ||
|
||
# Archive the MacOS Universal build artifacts | ||
- name: Archive MacOS Universal artifacts | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: macos-universal | ||
# The current path is very specific and might need adjustments with any changes in the file name or structure. A more generalized path (e.g., src-tauri/target/release/bundle/dmg/*.dmg) would be preferable as it's more flexible and resilient to such changes. | ||
path: src-tauri/target/universal-apple-darwin/release/bundle/dmg/*.dmg | ||
if-no-files-found: error # or 'warn' or 'ignore' | ||
|
||
# Placeholder steps for future implementation for Windows | ||
# Build the project for Windows OS | ||
# - name: Build for Windows | ||
# run: pnpm build:app:windows | ||
|
||
# - name: Archive Windows artifacts | ||
# uses: actions/upload-artifact@v3 | ||
# with: | ||
# name: windows | ||
# path: src-tauri/target/release/bundle/windows/* # Adjust this path if necessary | ||
|
||
# Placeholder steps for future implementation for Linux | ||
# Build the project for Linux OS | ||
# - name: Build for Linux | ||
# run: pnpm build:app:linux | ||
|
||
# - name: Archive Linux artifacts | ||
# uses: actions/upload-artifact@v3 | ||
# with: | ||
# name: linux | ||
# path: src-tauri/target/release/bundle/linux/* # Adjust this path if necessary | ||
|
||
# # List the contents of the build directory | ||
# # For Debugging purposes | ||
# - name: List files in the build directory | ||
# run: | | ||
# echo "Listing contents of macos-silicon directory" | ||
# ls -la src-tauri/target/aarch64-apple-darwin/release/bundle/dmg/ | ||
# echo "Listing contents of macos-intel directory" | ||
# ls -la src-tauri/target/x86_64-apple-darwin/release/bundle/dmg/ | ||
# echo "Listing contents of macos-universal directory" | ||
# ls -la src-tauri/target/universal-apple-darwin/release/bundle/dmg/ | ||
|
||
# Define the release job which depends on the build job | ||
release: | ||
# Specify that this job needs the build job to complete successfully | ||
needs: build | ||
# Specify the runner environment | ||
runs-on: ubuntu-latest | ||
|
||
# Define the steps to be performed in the release job | ||
steps: | ||
# Download the build artifacts from the build job | ||
- name: Download artifacts | ||
uses: actions/download-artifact@v3 | ||
|
||
# # List the contents of the directories | ||
# # For debugging purposes | ||
# - name: List contents of directories | ||
# run: | | ||
# echo "Listing contents of macos-silicon directory" | ||
# ls -la /home/runner/work/Ollama-Gui/Ollama-Gui/macos-silicon | ||
# echo "Listing contents of macos-intel directory" | ||
# ls -la /home/runner/work/Ollama-Gui/Ollama-Gui/macos-intel | ||
# echo "Listing contents of macos-universal directory" | ||
# ls -la /home/runner/work/Ollama-Gui/Ollama-Gui/macos-universal | ||
|
||
# Needs to be updated to use an adequate generated tag | ||
# Generate the tag | ||
- name: Generate tag | ||
id: generate_tag | ||
run: echo "::set-output name=tag::release-$(date +'%Y%m%d%H%M%S')" | ||
# Create a new GitHub release with the generated tag | ||
- name: Create GitHub Release | ||
id: create_release | ||
uses: actions/create-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ steps.generate_tag.outputs.tag }} | ||
release_name: Release ${{ steps.generate_tag.outputs.tag }} | ||
draft: false | ||
prerelease: false | ||
|
||
# Get the file name and assign it to an object | ||
- name: Get Silicon file name | ||
id: get_filename_silicon | ||
run: echo "::set-output name=filename::$(ls /home/runner/work/Ollama-Gui/Ollama-Gui/macos-silicon/*.dmg)" | ||
|
||
# Print the file name | ||
- name: Echo the Silicon file name | ||
run: echo "The file name is ${{ steps.get_filename_silicon.outputs.filename }}" | ||
|
||
# Upload the MacOS Silicon build artifact to the GitHub release | ||
- name: Upload Release Asset (MacOS Silicon) | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
asset_path: ${{ steps.get_filename_silicon.outputs.filename }} # adjusted path | ||
asset_name: Ollama-Gui-MacOS-Silicon.dmg | ||
asset_content_type: application/octet-stream | ||
|
||
# Get the file name and assign it to an object | ||
- name: Get Intel file name | ||
id: get_filename_intel | ||
run: echo "::set-output name=filename::$(ls /home/runner/work/Ollama-Gui/Ollama-Gui/macos-intel/*.dmg)" | ||
|
||
# Print the file name | ||
- name: Echo the Intel file name | ||
run: echo "The Intel file name is ${{ steps.get_filename_intel.outputs.filename }}" | ||
|
||
# Upload the MacOS Intel build artifact to the GitHub release | ||
- name: Upload Release Asset (MacOS Intel) | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
asset_path: ${{ steps.get_filename_intel.outputs.filename }} # adjusted path | ||
asset_name: Ollama-Gui-MacOS-Intel.dmg | ||
asset_content_type: application/octet-stream | ||
|
||
# Get the file name and assign it to an object | ||
- name: Get Universal file name | ||
id: get_filename_universal | ||
run: echo "::set-output name=filename::$(ls /home/runner/work/Ollama-Gui/Ollama-Gui/macos-universal/*.dmg)" | ||
|
||
# Print the file name | ||
- name: Echo the Universal file name | ||
run: echo "The Universal file name is ${{ steps.get_filename_universal.outputs.filename }}" | ||
|
||
# Upload the MacOS Universal build artifact to the GitHub release | ||
- name: Upload Release Asset (MacOS Universal) | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.create_release.outputs.upload_url }} | ||
asset_path: ${{ steps.get_filename_universal.outputs.filename }} # adjusted path | ||
asset_name: Ollama-Gui-MacOS-Universal.dmg | ||
asset_content_type: application/octet-stream |