diff --git a/.github/actions/setup-leiningen/action.yml b/.github/actions/setup-leiningen/action.yml new file mode 100644 index 0000000..c7bf075 --- /dev/null +++ b/.github/actions/setup-leiningen/action.yml @@ -0,0 +1,40 @@ +name: 'Setup Leiningen' +description: 'Install system dependencies, JDK, and Leiningen for Clojure projects' +inputs: + java-version: + description: 'Java version to set up' + required: false + default: '17' + install-deps: + description: 'Whether to install Leiningen dependencies (lein deps and lein pom)' + required: false + default: 'false' +runs: + using: 'composite' + steps: + - name: Install system dependencies + shell: bash + run: | + sudo apt-get update + sudo apt-get install -y gzip + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: ${{ inputs.java-version }} + + - name: Install Leiningen + shell: bash + run: | + wget https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein + chmod +x lein + sudo mv lein /usr/local/bin/ + lein version + + - name: Install Leiningen dependencies + if: inputs.install-deps == 'true' + shell: bash + run: | + lein deps + lein pom diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bee075d --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,66 @@ +name: CI + +on: + push: + branches: + - '**' + tags: + - '**' + pull_request: + branches: + - '**' + +jobs: + build: + name: "Build & Test" + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Leiningen + uses: ./.github/actions/setup-leiningen + + - name: Run tests + run: lein test + + test: + name: "Test (develop branch)" + runs-on: ubuntu-latest + if: github.ref == 'refs/heads/develop' + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Leiningen + uses: ./.github/actions/setup-leiningen + with: + install-deps: 'true' + + - name: Run tests + run: lein test + + publish: + name: "Publish to Clojars" + runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Leiningen + uses: ./.github/actions/setup-leiningen + with: + install-deps: 'true' + + - name: Run tests + run: lein test + + - name: Deploy to Clojars + env: + CLOJARS_USERNAME: ${{ vars.CLOJARS_USERNAME }} + CLOJARS_PASSWORD: ${{ secrets.CLOJARS_PASSWORD}} + run: lein deploy