diff --git a/.github/workflows/md_lint.yml b/.github/workflows/md_lint.yml new file mode 100644 index 0000000..489008e --- /dev/null +++ b/.github/workflows/md_lint.yml @@ -0,0 +1,17 @@ +name: Lint markdown files + +# Build on every branch push, tag push, and pull request change: +on: [push, pull_request] + +jobs: + checks: + runs-on: ubuntu-latest + name: Lint md files + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Lint markdown files + uses: articulate/actions-markdownlint@v1.1.0 + with: + config: .markdownlint.jsonc diff --git a/.github/workflows/publish_crate.yml b/.github/workflows/publish_crate.yml new file mode 100644 index 0000000..09630ba --- /dev/null +++ b/.github/workflows/publish_crate.yml @@ -0,0 +1,140 @@ +name: Build and upload Rust crate + +# Build on every branch push, tag push, and pull request change: +on: [push, pull_request] + +jobs: + check_fmt: + name: Check format + runs-on: ubuntu-latest + + steps: + - name: Checkout reposistory + uses: actions/checkout@v4 + + - name: Setup Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Check format + run: cargo fmt --check + + check_clippy: + name: Check clippy + runs-on: ubuntu-latest + + steps: + - name: Checkout reposistory + uses: actions/checkout@v4 + + - name: Setup Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Setup clippy + run: rustup component add clippy + + - name: Run clippy + run: cargo clippy --all-targets -- -D warnings + + # run_tests: + # name: Run tests + # runs-on: ubuntu-latest +# + # steps: + # - name: Checkout reposistory + # uses: actions/checkout@v4 +# + # - name: Setup Rust toolchain + # uses: actions-rs/toolchain@v1 + # with: + # toolchain: stable + # override: true +# + # - name: Run tests + # run: cargo test --workspace + + + release: + name: release ${{ matrix.target }} + runs-on: ubuntu-latest + needs: [check_fmt, check_clippy] # run_tests + + strategy: + fail-fast: false + matrix: + - target: + - x86_64-pc-windows-gnu + - x86_64-pc-windows-msvc + - x86_64-apple-darwin + - aarch64-apple-darwin + - x86_64-unknown-linux-musl + - x86_64-unknown-linux-gnu + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Setup Rust toolchain + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Build cli + run: cargo build --release --target ${{ matrix.target }} + + - name: Move files for packaging + run: | + mkdir -p package/ + cp target/${{ matrix.target }}/release/slinky-cli package/ || cp target/${{ matrix.target }}/release/slinky-cli.exe package/ + cp LICENSE package/slinky-cli.LICENSE + cp README.md package/slinky-cli.README.md + tree package + + - name: Package .tar.gz + run: | + cd package && tar -czf ../slinky-cli-${{ matrix.crate-type }}-${{ matrix.target }}.tar.gz * + + - name: Upload .tar.gz artifact + uses: actions/upload-artifact@v3 + with: + name: slinky-cli-${{ matrix.crate-type }}-${{ matrix.target }} + path: | + slinky-cli-${{ matrix.crate-type }}-${{ matrix.target }}.tar.gz + if-no-files-found: error + + - name: Publish .tar.gz release + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') && matrix.archive == 'tar.gz' + with: + files: slinky-cli-${{ matrix.crate-type }}-${{ matrix.target }}.tar.gz + + publish: + name: Publish + runs-on: ubuntu-latest + needs: [check_fmt, check_clippy] # run_tests + + steps: + - name: Checkout reposistory + uses: actions/checkout@v4 + + - name: Setup Rust toolchain + uses: actions-rs/toolchain@v1 + with: + toolchain: stable + override: true + + - name: Build Rust package + run: cargo build --release --workspace + + - name: Publish dry run + if: github.event_name == 'push' && !startsWith(github.ref, 'refs/tags/') + run: cargo publish --dry-run + + - name: Upload crate + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/') + run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }} diff --git a/.markdownlint.jsonc b/.markdownlint.jsonc new file mode 100644 index 0000000..ef8db42 --- /dev/null +++ b/.markdownlint.jsonc @@ -0,0 +1,14 @@ +{ + // https://github.com/DavidAnson/markdownlint/blob/main/doc/md024.md + // MD024 - Multiple headings with the same content + "MD024": { + "siblings_only": true + }, + + // https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md + // MD013 - Line length + "MD013": { + "code_block_line_length": 120, + "headings": false + } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a20a77e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,7 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 + // for the documentation about the extensions.json format + "recommendations": [ + "davidanson.vscode-markdownlint" + ] +}