Skip to content

Commit eef4be6

Browse files
gmorphemeclaude
andauthored
Complete Phase 1: GC Implementation with Comprehensive Test Suite (#187)
* Rename badly named InfoTable. * Renames and minor refactors * WIP * More WIP * Started sweep. * A clock so we can check GC perf. * Add option for heap limit * Put floor and ceiling back - fix: restored missing FLOOR and CEILING intrinsics (`floor`, `ceil` in prelude) * Fix time deprecations * First draft new GC feature. * Fix Immix garbage collection implementation and code quality issues. - Fixed find_hole algorithm in bump allocator with correct upper bound calculation - Applied conservative marking only to upper bounds as per Immix specification - All 6 previously failing GC unit tests now pass - Fixed clippy warnings: collapsed nested if statements, used is_some_and, used first() instead of get(0) - Maintained compatibility with existing test suite (160/161 tests pass) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix GitHub Actions workflows to use current action versions - Update actions/checkout@v2 -> v4 - Update actions/cache@v1 -> v4 - Update actions/upload-artifact@v1/v2 -> v4 - Update actions/download-artifact@v2 -> v4 - Update actions/setup-python@v2 -> v5, Python 3.6 -> 3.12 - Replace deprecated actions-rs/* with dtolnay/rust-toolchain@stable - Use direct cargo commands instead of actions-rs/cargo - Improve caching strategy for better performance 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix rustfmt and clippy issues in CI/CD pipeline - Update deprecated GitHub Actions to current versions - Fix rustfmt formatting issues in error.rs and vm.rs - Fix clippy issues: get_first, needless_lifetimes, derivable_impls - Add code quality rules to CLAUDE.md prohibiting clippy allows - Replace get(0) with first() throughout disembed.rs - Fix lifetime elision issues across memory management modules - Convert manual Default impls to derive macros where appropriate - Remove unnecessary type casts and fix pointer casting - Rename as_ref() to get() in ScanPtr to avoid trait confusion 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix empty line after doc comment clippy error in compiler.rs 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix ALL clippy warnings throughout the codebase - Fixed needless lifetimes in all STG intrinsic functions - Fixed derivable impls for Default traits - Fixed unnecessary casting in printf.rs - Fixed redundant closures in import modules - Fixed needless borrows for generic args - Fixed large error variants by boxing Input in ImportError - Fixed map_or to is_some_and simplification - Fixed explicit into_iter calls All clippy issues have been systematically addressed as required. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix all clippy and rustfmt issues for CI/CD pipeline - Box large error variants in EucalyptError to fix result_large_err warnings - Update error conversions to use Box::new() for SourceError and ExecutionError - Apply rustfmt formatting to all modified code - Resolve all remaining clippy warnings without using allow attributes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix final clippy warning: simplify if let with unwrap_or_default Replace if let Some(block) = self.recycled.pop_front() pattern with .unwrap_or_default() for cleaner code as suggested by clippy. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix additional large error variant: box InvalidEdn error type Box the edn_format::ParserErrorWithContext in SourceError::InvalidEdn to resolve result_large_err clippy warning in CI environment. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement Phase 0.1: First GC test infrastructure PHASE 0.1 MILESTONE COMPLETE: GC Test Suite Foundation ✅ **Infrastructure Established:** - Created `harness/test/gc/` directory structure - Integrated GC tests with existing harness (`tests/harness_test.rs`) - Established test pattern for GC validation ✅ **First GC Test Implemented:** `gc_001_basic_collection.eu` - Tests basic allocation → collection cycle - Allocates 75 objects (50 + 25) with 100-element data arrays - Validates data integrity after potential GC cycles - Verifies object counts and data consistency ✅ **GC Behavior Verified:** - Collection successfully triggered (2,400 blocks allocated/recycled) - Excellent collection ratio (69 used / 2,400 allocated = 97.1% reclaimed) - Reasonable GC overhead (4.2% of execution time) - Zero data corruption (all integrity checks pass) ✅ **Metrics Baseline Established:** - Machine stats: 5,158 ticks, 5,019 allocs, 32 max stack - GC timing: 35ms mark + 11ms sweep = 46ms total - Heap efficiency: 97.1% reclamation rate **Foundation for remaining 9 GC tests in Phase 0.1 now ready.** 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement gc_002_stress_allocation.eu test with future scaling plan - Add second comprehensive GC test focusing on stress allocation patterns - Current scale: 70 objects total with reduced sizes for reasonable test time - Future scale: 500 objects with large sizes documented via TODO comments - Test validates: object counts, ID correctness, and data integrity - Successfully integrated with harness test suite - All 51 tests passing including both GC tests (gc_001 and gc_002) The test is designed to be easily scaled up once GC performance is optimized, with clear indicators throughout the code showing where to increase stress. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement gc_003_memory_pressure.eu test with scaling plan - Add third GC test focusing on memory pressure scenarios - Current scale: 9 objects (3 small, 3 medium, 3 large) with minimal buffers - Future scale: 60+ objects with large buffers for intensive pressure testing - Test validates: object survival under pressure, buffer integrity, size classes - Successfully integrated with harness test suite - All 52 tests passing including 3 GC tests (gc_001, gc_002, gc_003) The test demonstrates GC behavior under different allocation sizes and provides clear scaling indicators for future stress testing enhancements. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Implement gc_004_fragmentation.eu test with scaling plan - Add fourth GC test focusing on memory fragmentation scenarios - Current scale: 6 objects with interleaved large/small/medium allocation pattern - Future scale: 100+ objects with complex allocation/deallocation cycles - Test validates: fragmentation survival, type preservation, buffer integrity - Successfully integrated with harness test suite - All 53 tests passing including 4 GC tests (gc_001, gc_002, gc_003, gc_004) The test demonstrates GC behavior under memory fragmentation through mixed allocation patterns and provides clear scaling indicators for future enhancement. Key lesson: Operator precedence matters in arithmetic expressions within test assertions. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Complete Phase 0.1: Implement comprehensive GC test suite expansion This commit completes Phase 0.1 of the Immix GC implementation plan by adding 10 comprehensive garbage collection tests covering all major GC scenarios: • gc_001_basic_collection.eu - Basic GC functionality validation (existing) • gc_002_stress_allocation.eu - Stress allocation testing with 70 objects • gc_003_memory_pressure.eu - Memory pressure testing with 9 objects • gc_004_fragmentation.eu - Memory fragmentation testing with 6 objects • gc_005_collection_cycles.eu - Multiple collection cycles with 12 objects • gc_006_object_lifecycle.eu - Generational behavior with 15 objects • gc_007_concurrent_allocation.eu - Concurrent patterns with 18 objects • gc_008_edge_cases.eu - Edge cases and boundaries with 13 objects • gc_009_performance_regression.eu - Performance regression detection with 25 objects • gc_010_comprehensive_stress.eu - Combined stress testing with 45 objects Key features implemented: - Comprehensive GC validation across stress allocation, memory pressure, fragmentation, collection cycles, object lifecycle, concurrent allocation, edge cases, performance regression, and comprehensive stress scenarios - Scaling comments indicating future ambition levels (500-2000+ objects per test) - Robust test patterns avoiding Eucalypt performance issues with complex expressions - Complete integration with harness test framework - All 220+ tests passing with clean clippy and formatting This establishes a solid foundation for future Immix GC development and validation, providing systematic coverage of GC behavior under diverse conditions and workloads. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix: Remove invalid [unstable] configuration from Cargo.toml The [unstable] section with core_intrinsics feature was not a valid Cargo.toml configuration and was causing "unused manifest key" warnings on every cargo command. This feature is not used anywhere in the codebase. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix clippy manual_ok_or and needless_lifetimes lints in Mod struct - Replace .map_or(Err(...), Ok) with .ok_or(...) pattern - Remove unnecessary lifetime parameter in execute method 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix clippy manual_ok_or and needless_lifetimes lints in Mod struct - Replace .map_or(Err(...), Ok) with .ok_or(...) pattern - Remove unnecessary lifetime parameter in execute method 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix security vulnerabilities by updating dependencies - Update bumpalo from 3.9.1 to 3.18.1 (fixes use-after-free) - Update idna from 0.3.0 to 1.0.3 (fixes domain masking) - Update url from 2.3.1 to 2.5.4 (fixes idna dependency) - Update webbrowser from 0.8.0 to 0.8.15 (fixes path traversal) - Replace atty 0.2 with std::io::IsTerminal (fixes unaligned read) - Update many other dependencies for compatibility All dependabot security alerts now resolved. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix chrono deprecation warnings - Replace TimeZone::ymd() with with_ymd_and_hms() - Replace TimeZone::timestamp() with timestamp_opt() - Replace DateTime::from_utc() with from_naive_utc_and_offset() - Replace FixedOffset::east() with east_opt() - Replace NaiveDate::and_hms() with and_hms_opt() All deprecation warnings now resolved, code passes clippy -D warnings. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Fix rustfmt formatting issues in time.rs Rustfmt CI was failing due to long lines in chrono deprecation fixes. Applied cargo fmt to fix formatting. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Update CLAUDE.md with Phase 1 completion and development workflow - Document GC Phase 1 completion with comprehensive test suite - Add pre-commit checklist to prevent CI failures - Document security and dependency management practices - Add GC test locations and integration details 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 8dd25d1 commit eef4be6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+4685
-1342
lines changed

.DS_Store

6 KB
Binary file not shown.

.cache/41/cache.db

100 KB
Binary file not shown.

.claude/settings.local.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(cargo:*)",
5+
"Bash(timeout 300 cargo test --lib)",
6+
"Bash(git stash:*)",
7+
"Bash(git checkout:*)",
8+
"WebFetch(domain:github.com)",
9+
"Bash(gh:*)",
10+
"Bash(python3:*)",
11+
"Bash(grep:*)",
12+
"Bash(git add:*)",
13+
"Bash(rg:*)",
14+
"Bash(../../target/debug/eu --heap-limit-mib 1 --heap-dump-at-gc -e \"[0..10000]\")",
15+
"Bash(./target/debug/eu --heap-limit-mib 1 --heap-dump-at-gc -e \"[0..10000]\")",
16+
"Bash(/Users/greg/dev/curvelogic/eucalypt/target/debug/eu --heap-limit-mib 1 --heap-dump-at-gc -e \"[0..100]\")",
17+
"Bash(./target/debug/eu --heap-limit-mib 1 --heap-dump-at-gc -e \"[0..100]\")",
18+
"Bash(find:*)"
19+
],
20+
"deny": []
21+
}
22+
}

.github/workflows/build-rust.yaml

Lines changed: 72 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,10 @@ jobs:
1414
name: Check
1515
runs-on: ubuntu-latest
1616
steps:
17-
- uses: actions/checkout@v2
18-
- uses: actions-rs/toolchain@v1
19-
with:
20-
profile: minimal
21-
toolchain: stable
22-
override: true
23-
- uses: actions-rs/cargo@v1
24-
with:
25-
command: check
17+
- uses: actions/checkout@v4
18+
- uses: dtolnay/rust-toolchain@stable
19+
- name: Check
20+
run: cargo check
2621

2722
test:
2823
name: Test Suite
@@ -31,54 +26,41 @@ jobs:
3126
os: [ubuntu-latest, macos-latest]
3227
runs-on: ${{ matrix.os }}
3328
steps:
34-
- uses: actions/checkout@v2
35-
- uses: actions/cache@v1
29+
- uses: actions/checkout@v4
30+
- uses: actions/cache@v4
3631
with:
37-
path: ~/.cargo
38-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
32+
path: |
33+
~/.cargo/registry
34+
~/.cargo/git
35+
target
36+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
3937
restore-keys: |
40-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
41-
${{ runner.os }}-cargo
42-
- uses: actions-rs/toolchain@v1
43-
with:
44-
profile: minimal
45-
toolchain: stable
46-
override: true
47-
- uses: actions-rs/cargo@v1
48-
with:
49-
command: test
38+
${{ runner.os }}-cargo-
39+
- uses: dtolnay/rust-toolchain@stable
40+
- name: Run tests
41+
run: cargo test
5042

5143
fmt:
5244
name: Rustfmt
5345
runs-on: ubuntu-latest
5446
steps:
55-
- uses: actions/checkout@v2
56-
- uses: actions-rs/toolchain@v1
47+
- uses: actions/checkout@v4
48+
- uses: dtolnay/rust-toolchain@stable
5749
with:
58-
profile: minimal
59-
toolchain: stable
60-
override: true
61-
- run: rustup component add rustfmt
62-
- uses: actions-rs/cargo@v1
63-
with:
64-
command: fmt
65-
args: --all -- --check
50+
components: rustfmt
51+
- name: Check formatting
52+
run: cargo fmt --all -- --check
6653

6754
clippy:
6855
name: Clippy
6956
runs-on: ubuntu-latest
7057
steps:
71-
- uses: actions/checkout@v2
72-
- uses: actions-rs/toolchain@v1
73-
with:
74-
profile: minimal
75-
toolchain: stable
76-
override: true
77-
- run: rustup component add clippy
78-
- uses: actions-rs/cargo@v1
58+
- uses: actions/checkout@v4
59+
- uses: dtolnay/rust-toolchain@stable
7960
with:
80-
command: clippy
81-
args: -- -D warnings
61+
components: clippy
62+
- name: Run clippy
63+
run: cargo clippy -- -D warnings
8264

8365
benchmark:
8466
needs: [check, test, fmt, clippy]
@@ -87,31 +69,29 @@ jobs:
8769
# if: ${{ false }}
8870
continue-on-error: true
8971
steps:
90-
- uses: actions/cache@v1
72+
- uses: actions/cache@v4
9173
with:
92-
path: ~/.cargo
93-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
74+
path: |
75+
~/.cargo/registry
76+
~/.cargo/git
77+
target
78+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
9479
restore-keys: |
95-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
96-
${{ runner.os }}-cargo
97-
- uses: actions-rs/toolchain@v1
98-
with:
99-
profile: minimal
100-
toolchain: stable
101-
override: true
102-
- uses: actions/checkout@v2
80+
${{ runner.os }}-cargo-
81+
- uses: dtolnay/rust-toolchain@stable
82+
- uses: actions/checkout@v4
10383
with:
10484
ref: ${{ github.event.pull_request.base.sha }}
10585
- run: |
10686
cargo bench --bench alloc -- --save-baseline base
107-
- uses: actions/checkout@v2
87+
- uses: actions/checkout@v4
10888
with:
10989
clean: false
11090
ref: ${{ github.event.pull_request.head.sha }}
11191
- run: |
11292
cargo bench --bench alloc -- --baseline base
11393
- name: Save HTML report
114-
uses: actions/upload-artifact@v2
94+
uses: actions/upload-artifact@v4
11595
with:
11696
name: benchmark-report
11797
path: |
@@ -123,30 +103,23 @@ jobs:
123103
runs-on: ubuntu-latest
124104
if: github.ref == 'refs/heads/master'
125105
steps:
126-
- uses: actions/checkout@v2
106+
- uses: actions/checkout@v4
127107
with:
128108
fetch-depth: 0
129-
- uses: actions/cache@v1
109+
- uses: actions/cache@v4
130110
with:
131-
path: ~/.cargo
132-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
111+
path: |
112+
~/.cargo/registry
113+
~/.cargo/git
114+
target
115+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
133116
restore-keys: |
134-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
135-
${{ runner.os }}-cargo
136-
- uses: actions-rs/toolchain@v1
137-
with:
138-
profile: minimal
139-
toolchain: stable
140-
override: true
141-
- uses: actions-rs/cargo@v1
142-
with:
143-
command: install
144-
args: git-changelog
117+
${{ runner.os }}-cargo-
118+
- uses: dtolnay/rust-toolchain@stable
119+
- name: Install git-changelog
120+
run: cargo install git-changelog
145121
- name: build and install temporary eu
146-
uses: actions-rs/cargo@v1
147-
with:
148-
command: install
149-
args: --path .
122+
run: cargo install --path .
150123
- name: prepare build files for new version
151124
run: |
152125
export OSTYPE=$(uname)
@@ -156,14 +129,10 @@ jobs:
156129
mv -f build-meta.yaml.new build-meta.yaml
157130
158131
echo "TAG_NAME=$(eu -t version)" >> $GITHUB_ENV
159-
- uses: actions-rs/cargo@v1
160-
with:
161-
command: test
162-
args: --release
163-
- uses: actions-rs/cargo@v1
164-
with:
165-
command: build
166-
args: --all --release
132+
- name: Run release tests
133+
run: cargo test --release
134+
- name: Build release
135+
run: cargo build --all --release
167136
- run: |
168137
strip target/release/eu
169138
mv target/release/eu target/release/eu_amd64
@@ -178,12 +147,12 @@ jobs:
178147
run: |
179148
echo "$(git-changelog latest...)" > CHANGELOG.md
180149
- name: Upload changelog
181-
uses: actions/upload-artifact@v1
150+
uses: actions/upload-artifact@v4
182151
with:
183152
name: CHANGELOG.md
184153
path: CHANGELOG.md
185154
- name: Upload binary
186-
uses: actions/upload-artifact@v1
155+
uses: actions/upload-artifact@v4
187156
with:
188157
name: eu_amd64
189158
path: target/release/eu_amd64
@@ -195,24 +164,19 @@ jobs:
195164
runs-on: macos-latest
196165
if: github.ref == 'refs/heads/master'
197166
steps:
198-
- uses: actions/checkout@v2
199-
- uses: actions/cache@v1
167+
- uses: actions/checkout@v4
168+
- uses: actions/cache@v4
200169
with:
201-
path: ~/.cargo
202-
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}-${{ hashFiles('**/Cargo.lock') }}
170+
path: |
171+
~/.cargo/registry
172+
~/.cargo/git
173+
target
174+
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
203175
restore-keys: |
204-
${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml') }}
205-
${{ runner.os }}-cargo
206-
- uses: actions-rs/toolchain@v1
207-
with:
208-
profile: minimal
209-
toolchain: stable
210-
override: true
176+
${{ runner.os }}-cargo-
177+
- uses: dtolnay/rust-toolchain@stable
211178
- name: Build and install temporary eu
212-
uses: actions-rs/cargo@v1
213-
with:
214-
command: install
215-
args: --path .
179+
run: cargo install --path .
216180
- name: Prepare build files for new version
217181
run: |
218182
export OSTYPE=$(uname)
@@ -222,14 +186,10 @@ jobs:
222186
mv -f build-meta.yaml.new build-meta.yaml
223187
224188
echo "TAG_NAME=$(eu -t version)" >> $GITHUB_ENV
225-
- uses: actions-rs/cargo@v1
226-
with:
227-
command: test
228-
args: --release
229-
- uses: actions-rs/cargo@v1
230-
with:
231-
command: build
232-
args: --all --release
189+
- name: Run release tests
190+
run: cargo test --release
191+
- name: Build release
192+
run: cargo build --all --release
233193
- run: |
234194
strip target/release/eu
235195
mv target/release/eu target/release/eu_darwin
@@ -238,7 +198,7 @@ jobs:
238198
target/release/eu_darwin -v
239199
target/release/eu_darwin harness/test -T
240200
- name: Upload binary
241-
uses: actions/upload-artifact@v1
201+
uses: actions/upload-artifact@v4
242202
with:
243203
name: eu_darwin
244204
path: target/release/eu_darwin
@@ -251,15 +211,15 @@ jobs:
251211
- release-candidate-macos
252212
steps:
253213

254-
- uses: actions/download-artifact@v2
214+
- uses: actions/download-artifact@v4
255215
with:
256216
name: eu_darwin
257217

258-
- uses: actions/download-artifact@v2
218+
- uses: actions/download-artifact@v4
259219
with:
260220
name: eu_amd64
261221

262-
- uses: actions/download-artifact@v2
222+
- uses: actions/download-artifact@v4
263223
with:
264224
name: CHANGELOG.md
265225

.github/workflows/docs.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ jobs:
99
update-docs:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v2
12+
- uses: actions/checkout@v4
1313
with:
1414
ref: ${{ env.GITHUB_REF }}
15-
- uses: actions/setup-python@v2
15+
- uses: actions/setup-python@v5
1616
with:
17-
python-version: 3.6
17+
python-version: '3.12'
1818
- name: generate and push docs
1919
run: |
2020
python -m pip install -r docs/requirements.txt

.github/workflows/release.yaml

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ jobs:
99
update-latest-tag:
1010
runs-on: ubuntu-latest
1111
steps:
12-
- uses: actions/checkout@v2
12+
- uses: actions/checkout@v4
1313
with:
1414
fetch-depth: 0
1515
- name: update branch latest
@@ -21,24 +21,17 @@ jobs:
2121
runs-on: ubuntu-latest
2222
needs: [update-latest-tag]
2323
steps:
24-
- uses: actions/checkout@v2
25-
- uses: actions-rs/toolchain@v1
26-
with:
27-
profile: minimal
28-
toolchain: stable
29-
override: true
24+
- uses: actions/checkout@v4
25+
- uses: dtolnay/rust-toolchain@stable
3026
- name: build and install temporary eu
31-
uses: actions-rs/cargo@v1
32-
with:
33-
command: install
34-
args: --path .
27+
run: cargo install --path .
3528
- name: generate homebrew formula
3629
run: |
3730
eu -t formula-sh > generate.sh
3831
chmod +x generate.sh
3932
./generate.sh > eucalypt.rb
4033
- name: upload formula
41-
uses: actions/upload-artifact@v1
34+
uses: actions/upload-artifact@v4
4235
with:
4336
name: eucalypt.rb
4437
path: eucalypt.rb

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
**/*.rs.bk
33
/.idea
44
/harness/test/.result/
5+
/src/syntax/grammar.rs
6+
/src/syntax/string_pattern.rs

0 commit comments

Comments
 (0)