You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> The project works on the Vue Simulator and aims at pushing the vue-simulator to production. We have achieved several milestones like Authentication model, a beautiful Release Pipeline for Tauri simulator, version sync for v0 and v1, a brand new Testbench UI and many more. Let's dive into them right away !!**
19
19
20
-
### New features that have been added and merged include:
21
-
- Verilog modules for circuit elements
22
-
- Play/Pause button in the simulator
23
-
- Improved UI/UX for code editor
24
-
- Verilog terminal
25
-
- Resizable & draggable view of tools window
26
-
- Yosys Upgrade
20
+
### Major statures that have been added and merged include:
21
+
- Authentication model for Web and Tauri Simulator
22
+
- Release Pipeline for Tauri Simulator
23
+
- An improved Testbench UI/UX
24
+
- Vue-Simulator integration with the primary codebase
CircuitVerse had implemented the versioning system to avoid merging big changes to the simulator directly. This resulted in the formation of V0/, V1/ and SRC/ folders in the vue-simulator. Currently the V0 folder is default source but it can be changed by altering the configuration files. My changes were made and merged into the V1/ folder. In future all these folders will be in sync and users can change between the verisons easily.
39
35
40
-
### The Verilog feature in CircuitVerse includes
41
-
1. Circuit to Verilog - allows users to convert circuit to verilog code
42
-
2. Verilog to Circuit - allows users to convert verilog code to circuits
36
+
### Automating Cross-Platform Desktop Releases
37
+
One of the key deliverables for my GSoC project was a reliable release pipeline for the CircuitVerse desktop app. I initially explored fully automated tools like semantic-release and release-it!, but they offered less manual control than we needed. The ideal solution needed to balance powerful automation with maintainer oversight.
38
+
39
+
The breakthrough was using GitHub Actions' workflow_dispatch. This allows us to trigger the release manually, providing input on the version type (major, minor, or patch), giving us the perfect blend of automation and control. This approach culminated in the final workflow that now powers our desktop releases.
40
+
41
+
### The Release Workflow Code
42
+
The entire process is encapsulated in a single GitHub Actions workflow file. It's composed of two primary jobs: build-tauri to compile the application across all platforms, and create-release to package and publish the final release.
43
+
44
+
```bash
45
+
name: Manually Triggered Desktop Release
46
+
47
+
permissions:
48
+
contents: write
49
+
actions: read
50
+
51
+
concurrency:
52
+
group: desktop-release-${{ github.ref }}
53
+
cancel-in-progress: true
54
+
55
+
on:
56
+
workflow_dispatch:
57
+
inputs:
58
+
version-bump:
59
+
description: 'The type of version bump (major, minor, or patch)'
test -n "$(ls -A release-assets 2>/dev/null)" || { echo "No assets to upload"; exit 1; }
238
+
gh release create "$NEW_VERSION" \
239
+
--title "CircuitVerse Desktop $NEW_VERSION" \
240
+
--notes-file "$CHANGELOG_NOTES_FILE" \
241
+
release-assets/*
242
+
```
243
+
### How It Works 🧐
244
+
The workflow operates in two sequential jobs:
245
+
246
+
**Job 1: `build-tauri`**
247
+
This job is the workhorse, responsible for compiling the application. It uses a matrix strategy to run three parallel jobs, one for each target OS: `ubuntu-latest`, `windows-latest`, and `macos-latest`. This is the key to efficient cross-platform building.
248
+
249
+
- **Environment Setup:** Each job begins by checking out the code and setting up the required toolchains, like Node.js and Rust. Crucially, it also installs OS-specific dependencies needed for compilation, such as `libwebkit2gtk-4.1-dev` on Ubuntu or `wixtoolset` on Windows.
250
+
251
+
- **Dependency Caching:** To dramatically speed up build times on subsequent runs, the workflow caches both the Node.js (`.npm`) and Rust (`.cargo`, `target`) dependency directories. This avoids re-downloading and re-compiling hundreds of packages every time.
252
+
253
+
- **Build & Upload:** The job then runs the tauri build command, which creates the native application installers. Once complete, it uses the `actions/upload-artifact` action to save these installers, making them available to the next job in the workflow.
254
+
255
+
**Job 2: `create-release`**
256
+
This job only runs after all three build jobs have completed successfully (needs: build-tauri). It handles the final packaging and publishing.
257
+
258
+
- **Artifact & Code Aggregation:** It begins by downloading all the build artifacts (the installers for Linux, macOS, and Windows) from the previous job. It also checks out the repository with `fetch-depth: 0` to ensure it has the full git history, which is essential for the next step.
259
+
260
+
- **Automated Changelog:** The `conventional-changelog-action` scans the git history since the last release tag. Based on conventional commit messages (like `feat:`, `fix:`, etc.), it automatically generates professional, well-formatted release notes.
261
+
262
+
- **Versioning:** A bash script then determines the new version number. It fetches the latest git tag (e.g., `v1.2.3`), parses it, and increments the version based on the version-bump input (`patch`, `minor`, or `major`) that was provided when the workflow was triggered.
263
+
264
+
- **Publishing:** Finally, using the GitHub CLI, the script creates a new GitHub Release. It tags the commit with the new version, sets the release title, attaches the auto-generated changelog as the release notes, and uploads all the cross-platform installers as release assets.
265
+
266
+
**The Final Product ✨**
267
+
The result is a beautifully simple and powerful release process. Now, any maintainer can go to the repository's "`Actions`" tab, select the "`Manually Triggered Desktop Release`" workflow, choose whether it's a `major`, `minor`, or `patch` release, and click "Run workflow."
268
+
269
+
~~**[Screenshot Here]: A screenshot of the GitHub Actions UI showing the "Run workflow" button with the version-bump dropdown.**~~
270
+
271
+
From there, everything is automated. Within minutes, a new, cross-platform release is published to GitHub, complete with installers for every OS and a professional changelog, ready for our users. This pipeline removes manual effort, eliminates human error, and ensures our releases are consistent and reliable every single time.
272
+
273
+
~~**[GIF/Video Here]: A short screen recording showing the process from clicking "Run workflow" to the final, published release on the GitHub Releases page.**~~
43
274
44
275
### Adding the Verilog Modules for Circuit Elements
0 commit comments