Skip to content

Commit

Permalink
Implementing GitHub Actions for Build and Deployment (#11)
Browse files Browse the repository at this point in the history
* 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
repollo and Rey Marrero committed Oct 4, 2023
1 parent da9a56a commit fcf8084
Showing 1 changed file with 229 additions and 0 deletions.
229 changes: 229 additions & 0 deletions .github/workflows/build-and-deploy.yml
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

0 comments on commit fcf8084

Please sign in to comment.