Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
af0c222
Route menu SFX via AudioManager and add GUT tests
ikostan Jun 26, 2026
02e9e6f
Use TuxFamily mirror for Godot downloads
ikostan Jun 26, 2026
adc83f3
Use GitHub SHA512 for Godot downloads
ikostan Jun 26, 2026
49c2455
Call AudioManager.cleanup_for_test in tests
ikostan Jun 26, 2026
f41cb73
Update test_nav_escape_sfx.gd
ikostan Jun 26, 2026
49b7742
Remove persistent UI nav SFX player
ikostan Jun 26, 2026
42505d5
Rename CI job and add verify-godot job
ikostan Jun 26, 2026
6885270
This test feeds input to main_menu._input, which never plays ui_accept.
ikostan Jun 26, 2026
370e558
Scene name mutation is not restored in after_each.
ikostan Jun 26, 2026
25f742a
Test-only scene-name fallback runs in production builds.
ikostan Jun 26, 2026
8d60ab1
Update main_menu.gd
ikostan Jun 26, 2026
bd6c36a
Update main_menu.gd
ikostan Jun 26, 2026
e951b2f
Add test bypass for quitting and adjust test setup
ikostan Jun 26, 2026
eca01ea
Use correct UI navigation sfx key
ikostan Jun 26, 2026
0d3edef
Update test_nav_escape_sfx.gd
ikostan Jun 26, 2026
b17aecb
Update test_nav_escape_sfx.gd
ikostan Jun 26, 2026
bb0f12b
Update test_nav_escape_sfx.gd
ikostan Jun 26, 2026
f93d0e6
Create Part_2_Route_menu_UI_SFX_through_AudioManager_&_add_GUT_tests.md
ikostan Jun 26, 2026
b2c6c27
Polish milestone docs and README formatting
ikostan Jun 26, 2026
8500d68
Update README.md
ikostan Jun 26, 2026
c6240b3
Update Part_2_Route_menu_UI_SFX_through_AudioManager_&_add_GUT_tests.md
ikostan Jun 26, 2026
d9b13db
Update test_nav_escape_sfx.gd
ikostan Jun 27, 2026
2cf5ea7
Update test_nav_escape_sfx.gd
ikostan Jun 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .github/workflows/test_ci_scripts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ on: # yamllint disable-line rule:truthy
required: true

jobs:
test-scripts:
name: "Test Deployment Scripts"
test-python:
name: "Run CI Injection Tests"
runs-on: "ubuntu-latest"
timeout-minutes: 5
steps:
Expand All @@ -32,6 +32,14 @@ jobs:
run: |
pytest tests/ci/ -v -s

verify-godot:
name: "Test Godot Asset Infrastructure and Signature Verification"
runs-on: "ubuntu-latest"
timeout-minutes: 10 # Generous timeout to download the 1.2 GB template file
steps:
- name: "Checkout code"
uses: "actions/checkout@v7"

- name: "Test Godot Asset Infrastructure and Signature Verification"
run: |
chmod +x .github/scripts/verify_godot.sh
Expand Down
16 changes: 8 additions & 8 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,23 +39,23 @@ RUN pip install pytest-html pytest-timeout
# Install markdownlint-cli2 via npm (Node.js tool)
RUN npm install -g markdownlint-cli2@0.12.1

# Download and verify Godot v4.6.3 binary using the official SHA256SUMS file
RUN wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/SHA256SUMS.txt \
# Download and verify Godot v4.6.3 binary using the official GitHub SHA512-SUMS file
RUN wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/SHA512-SUMS.txt \
&& wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/Godot_v4.6.3-stable_linux.x86_64.zip \
&& grep " Godot_v4.6.3-stable_linux.x86_64.zip$" SHA256SUMS.txt | sha256sum --check --status \
&& grep " Godot_v4.6.3-stable_linux.x86_64.zip$" SHA512-SUMS.txt | sha512sum --check --status \
&& unzip Godot_v4.6.3-stable_linux.x86_64.zip \
&& mv Godot_v4.6.3-stable_linux.x86_64 /usr/local/bin/godot \
&& chmod +x /usr/local/bin/godot \
&& rm Godot_v4.6.3-stable_linux.x86_64.zip SHA256SUMS.txt
&& rm Godot_v4.6.3-stable_linux.x86_64.zip SHA512-SUMS.txt

# Download, verify, and extract export templates using the official SHA256SUMS file
RUN wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/SHA256SUMS.txt \
# Download, verify, and extract export templates using the official GitHub SHA512-SUMS file
RUN wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/SHA512-SUMS.txt \
&& wget -q https://github.com/godotengine/godot/releases/download/4.6.3-stable/Godot_v4.6.3-stable_export_templates.tpz \
&& grep " Godot_v4.6.3-stable_export_templates.tpz$" SHA256SUMS.txt | sha256sum --check --status \
&& grep " Godot_v4.6.3-stable_export_templates.tpz$" SHA512-SUMS.txt | sha512sum --check --status \
&& mkdir -p "${XDG_DATA_HOME}/godot/export_templates/${GODOT_VERSION}" \
&& unzip Godot_v4.6.3-stable_export_templates.tpz -d /tmp/templates \
&& mv /tmp/templates/templates/* "${XDG_DATA_HOME}/godot/export_templates/${GODOT_VERSION}/" \
&& rm -rf /tmp/templates Godot_v4.6.3-stable_export_templates.tpz SHA256SUMS.txt \
&& rm -rf /tmp/templates Godot_v4.6.3-stable_export_templates.tpz SHA512-SUMS.txt \
&& chown -R godotuser:godotuser "${XDG_DATA_HOME}"

# Install GDUnit4 v6.1.3
Expand Down
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<!-- markdownlint-disable line-length -->
[![Project Start](https://img.shields.io/badge/Project_Start-Jul_28%2C_2025-blue?style=flat-square)](https://github.com/ikostan/SkyLockAssault/commit/c412eb3cea0bbc73f716a14afa678d21c7d4d0d0)
[![Made with Godot](https://img.shields.io/badge/Made%20with-Godot-478CBF?style=flat-square&logo=godot%20engine&logoColor=white)](https://godotengine.org)
[![Godot](https://img.shields.io/badge/Godot-4.5-blue?style=flat-square&logo=godot-engine)](https://godotengine.org/)
[![Godot](https://img.shields.io/badge/Godot-4.6.3-blue?style=flat-square&logo=godot-engine)](https://godotengine.org/)
[![GDScript](https://img.shields.io/badge/Language-GDScript-brightgreen?style=flat-square)](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html)
[![Itch.io](https://img.shields.io/badge/Deployment-Itch.io-purple?style=flat-square&logo=itch-dot-io)](https://itch.io/)
![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/ikostan/SkyLockAssault?utm_source=oss&utm_medium=github&utm_campaign=ikostan%2FSkyLockAssault&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
Expand Down Expand Up @@ -330,26 +330,26 @@ planned carryover work to future milestones.

#### 🌟 New Features & Polish

* **UI Audio Polish:** Implemented a dedicated `slider.wav` sound effect
- **UI Audio Polish:** Implemented a dedicated `slider.wav` sound effect
for audio menus that strictly triggers only upon manual player adjustments,
cleanly decoupling it from programmatic `value_changed` signals.
* **Encrypted Local Storage:** Transitioned local save configurations
- **Encrypted Local Storage:** Transitioned local save configurations
(`settings.cfg`) to use Godot's native encrypted `ConfigFile` methods.
* **Hardware-Bound Encryption:** Implemented an automatic encryption key
- **Hardware-Bound Encryption:** Implemented an automatic encryption key
generation system (`Globals._get_encryption_key()`) that combines the OS
name with a hardware-unique ID to securely lock local save data.

#### 🛠️ Architecture & Refactors

* **Centralized Configuration I/O:** Refactored core singletons (`Settings`,
- **Centralized Configuration I/O:** Refactored core singletons (`Settings`,
`AudioManager`) to route all file operations through a unified
`Globals.safe_load_config()` helper.
* **In-Memory Testing (Separation of Concerns):** Decoupled the config
- **In-Memory Testing (Separation of Concerns):** Decoupled the config
parsing logic from the physical file I/O. Our GUT and GdUnit4
error-handling test suites now construct `ConfigFile` objects entirely
in-memory, bypassing the disk and permanently eliminating fatal C++ crypto
layer crashes in the CI/CD pipeline.
* **Codebase Audit & Technical Debt:** Conducted a comprehensive audit of the
- **Codebase Audit & Technical Debt:** Conducted a comprehensive audit of the
core singletons. Verified a warning-free baseline by confirming no syntax
errors exist in legacy `settings.gd` fallback calls.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ Drove entire PR #607 (10+ commits) fixing web export encryption
key crash (linked to #600).

**Core changes:**

- **globals.gd**: Replaced ProjectSettings salt with CI-injected
placeholder `"CI_INJECT_SALT_HERE"`, switched to
`OS.has_feature("web")` check, implemented SHA-256 key generation, added
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ issues.

## Contributions

### @ikostan’s Key Contributions to PR #654:
### @ikostan’s Key Contributions to PR #654

* Created the PR, self-assigned it, linked to issue #614, and
provided full documentation.
* **.github/workflows/deploy_to_itch.yml**: Upgraded Butler
to **15.27.0**, updated download URL, added centralized
to **15.27.0**, updated download URL, added centralized
`BUTLER_VERSION` + `BUTLER_SHA256` env vars, implemented
version-aware caching, conditional download on cache miss,
SHA-256 integrity verification, and proper setup (`chmod`,
Expand All @@ -80,7 +80,7 @@ issues.
cache key) and addressed bot feedback while preserving project
constraints.

All commits authored by @ikostan. This PR improves deployment
All commits authored by @ikostan. This PR improves deployment
reliability, caching stability, and supply-chain security.

---
Expand Down Expand Up @@ -140,5 +140,5 @@ since the pipeline requires linux-amd64).

---

**Full Contributors List (for GitHub recognition)**:
**Full Contributors List (for GitHub recognition)**:
@ikostan, @sourcery-ai, @coderabbitai, @deepsource-io (or @deepsource-bot).
Loading
Loading