Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
20488dd
fix: normalize ci.yml line endings to LF
JheisonMB Mar 30, 2026
3ba0e1d
fix: replace task-trigger-mcp references with texforge in release wor…
JheisonMB Mar 30, 2026
30c9988
chore: add .gitattributes to enforce LF line endings
JheisonMB Mar 30, 2026
afd04da
feat: add install.sh for binary installation from GitHub Releases
JheisonMB Mar 30, 2026
85c2983
feat: implement texforge new with template download and embedded fall…
JheisonMB Mar 30, 2026
5cbdb19
feat: implement texforge check with static lint rules
JheisonMB Mar 30, 2026
a6acbcc
feat: implement texforge fmt with opinionated LaTeX formatting
JheisonMB Mar 30, 2026
d7f6748
feat: implement texforge build wrapping tectonic with clean error output
JheisonMB Mar 30, 2026
6795260
refactor: remove unused stubs, drop thiserror, upgrade reqwest to 0.13
JheisonMB Mar 30, 2026
49a96be
fix: validate project name to prevent path traversal and empty names
JheisonMB Mar 30, 2026
86cf83f
feat: bundle tectonic install in install.sh for zero-friction setup
JheisonMB Mar 30, 2026
cf4e5a4
docs: rewrite README with installation options and full feature docs
JheisonMB Mar 31, 2026
8aee4c4
fix: strip LaTeX comments before linting to avoid false positives
JheisonMB Mar 31, 2026
224ccd3
fix: preserve verbatim and lstlisting content in formatter
JheisonMB Mar 31, 2026
2469b2f
fix: reject spaces in project names
JheisonMB Mar 31, 2026
c6f3969
fix: detect and warn on circular input references
JheisonMB Mar 31, 2026
e1323ce
fix: trim whitespace in command arguments to prevent false mismatches
JheisonMB Mar 31, 2026
91fd166
Merge pull request #1 from JheisonMB/feature/implement-core-v1
JheisonMB Mar 31, 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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* text=auto eol=lf
install.sh text eol=lf
216 changes: 108 additions & 108 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,108 +1,108 @@
name: CI
on:
pull_request:
branches:
- develop
- main
permissions:
contents: read
pull-requests: write
env:
CARGO_TERM_COLOR: always
jobs:
check:
name: Check, Test & Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
- name: Cargo fmt
run: cargo fmt --check
- name: Cargo build
run: cargo build --release
- name: Cargo test
run: cargo test
- name: Cargo clippy
run: cargo clippy --all-targets -- -D warnings
publish-check:
name: Publish Check (dry-run)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
- name: Cargo publish dry-run
run: cargo publish --dry-run
# Validaciones adicionales para PRs a main
main-pr-checks:
name: Main PR Requirements
if: github.base_ref == 'main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Check version bump
run: |
# Obtener la versión actual
CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "Versión en Cargo.toml: $CURRENT_VERSION"
# Obtener el último tag
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$LAST_TAG" ]; then
echo "✅ Primer release (no hay tags previos)"
else
LAST_VERSION=${LAST_TAG#v}
echo "Última versión en tag: $LAST_VERSION"
if [ "$CURRENT_VERSION" = "$LAST_VERSION" ]; then
echo "❌ Error: La versión en Cargo.toml debe bumpearse en PR a main"
echo "Cambio requerido para PRs a main:"
echo "- develop → main: version DEBE incrementarse"
exit 1
fi
echo "✅ Versión bumpeada correctamente"
fi
name: CI

on:
pull_request:
branches:
- develop
- main

permissions:
contents: read
pull-requests: write

env:
CARGO_TERM_COLOR: always

jobs:
check:
name: Check, Test & Clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo build
uses: actions/cache@v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

- name: Cargo fmt
run: cargo fmt --check

- name: Cargo build
run: cargo build --release

- name: Cargo test
run: cargo test

- name: Cargo clippy
run: cargo clippy --all-targets -- -D warnings

publish-check:
name: Publish Check (dry-run)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Cache cargo registry
uses: actions/cache@v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo index
uses: actions/cache@v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

- name: Cargo publish dry-run
run: cargo publish --dry-run

# Validaciones adicionales para PRs a main
main-pr-checks:
name: Main PR Requirements
if: github.base_ref == 'main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Check version bump
run: |
# Obtener la versión actual
CURRENT_VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "Versión en Cargo.toml: $CURRENT_VERSION"

# Obtener el último tag
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$LAST_TAG" ]; then
echo "✅ Primer release (no hay tags previos)"
else
LAST_VERSION=${LAST_TAG#v}
echo "Última versión en tag: $LAST_VERSION"
if [ "$CURRENT_VERSION" = "$LAST_VERSION" ]; then
echo "❌ Error: La versión en Cargo.toml debe bumpearse en PR a main"
echo "Cambio requerido para PRs a main:"
echo "- develop → main: version DEBE incrementarse"
exit 1
fi
echo "✅ Versión bumpeada correctamente"
fi
9 changes: 4 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -107,22 +107,22 @@ jobs:
if: matrix.archive == 'tar.gz'
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../task-trigger-mcp-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.tar.gz task-trigger-mcp
tar czf ../../../texforge-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.tar.gz texforge
cd ../../..

- name: Package (windows)
if: matrix.archive == 'zip'
shell: pwsh
run: |
cd target/${{ matrix.target }}/release
Compress-Archive -Path task-trigger-mcp.exe -DestinationPath ../../../task-trigger-mcp-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.zip
Compress-Archive -Path texforge.exe -DestinationPath ../../../texforge-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.zip
cd ../../..

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: task-trigger-mcp-${{ matrix.target }}
path: task-trigger-mcp-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.*
name: texforge-${{ matrix.target }}
path: texforge-${{ needs.create-tag.outputs.tag }}-${{ matrix.target }}.*

github-release:
name: Create GitHub Release
Expand Down Expand Up @@ -168,4 +168,3 @@ jobs:

- name: Cargo publish
run: cargo publish --token ${{ secrets.CARGO_TOKEN }}

2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ Cargo.lock
.kiro/
.agents/
.idea/
texforge-spec.md
skills-lock.json
8 changes: 7 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ clap = { version = "4.6", features = ["derive"] }

# Error handling
anyhow = "1.0"
thiserror = "2.0"

# Serialization (for project.toml, template.toml)
serde = { version = "1.0", features = ["derive"] }
Expand All @@ -31,6 +30,13 @@ walkdir = "2.5"
# Home directory resolution
dirs = "6.0"

# HTTP client (template downloads)
reqwest = { version = "0.13", features = ["blocking"] }

# Archive extraction (GitHub tarballs)
flate2 = "1.1"
tar = "0.4"

[dev-dependencies]
tempfile = "3.8"

Expand Down
Loading
Loading