Skip to content

Commit

Permalink
Make repo public (#5)
Browse files Browse the repository at this point in the history
  • Loading branch information
twist900 authored Sep 12, 2024
1 parent 9bce778 commit 0800c79
Show file tree
Hide file tree
Showing 12 changed files with 389 additions and 101 deletions.
5 changes: 0 additions & 5 deletions .github/PULL_REQUEST_TEMPLATE

This file was deleted.

261 changes: 192 additions & 69 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ name: Elixir CI Checks
env:
DEBIAN_FRONTEND: noninteractive
DEPENDENCY_FILE: mix.lock
ELIXIR_VERSION: 1.16.2 # Elixir version used during package publishing
ELIXIR_VERSION: 1.16.2
JOB_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
OTP_VERSION: 26.2.5 # OTP version used during package publishing
RELEVANT_FILES: "mix.lock mix.exs lib config test" # Important, this controls the caching, make sure to keep this right
OTP_VERSION: 26.2.5
RELEVANT_FILES: "mix.lock mix.exs lib priv config test"
REPOSITORY: absinthe_helpers
RUNNER_OS: ubuntu22 # Must match Elixir/OTP version in described in action erlef/setup-beam@v1
RUNNER_OS: ubuntu22
SHA: ${{ github.sha }}

concurrency:
Expand All @@ -30,109 +30,232 @@ jobs:
name: Static Checks (Elixir ${{ matrix.versions.elixir-version }})
runs-on: runs-on,runner=4cpu-linux-x64
outputs:
HASH: ${{ steps.prepare.outputs.HASH }}
HASH: ${{ steps.hash.outputs.HASH }}
strategy:
fail-fast: false
matrix:
versions:
- { elixir-version: 1.16.2, otp-version: 26.2.5, runner-os: 'ubuntu22' }
- {
elixir-version: 1.16.2,
otp-version: 26.2.5,
runner-os: "ubuntu22",
}
steps:
- name: Checkout and compile dependencies
id: prepare
uses: surgeventures/platform-tribe-actions/elixir/precompile@fast-elixir-repo-setup
- name: Checkout latest codebase
uses: actions/checkout@v4
with:
repository: ${{ env.REPOSITORY }}
dependency-file: ${{ env.DEPENDENCY_FILE }}
sha: ${{ env.SHA }}
token: ${{ secrets.GITHUB_TOKEN }}
hex-token: ${{ secrets.HEX_ORGANIZATION_KEY }}
mix-env: dev
relevant-files: ${{ env.RELEVANT_FILES }}
elixir-version: ${{ matrix.versions.elixir-version }}
otp-version: ${{ matrix.versions.otp-version }}
runner-os: ${{ matrix.versions.runner-os }}
- name: Compile the application
id: compile
uses: surgeventures/platform-tribe-actions/elixir/compile@fast-elixir-repo-setup
ref: ${{ env.SHA }}
clean: false
persist-credentials: true
- name: Setup Elixir
uses: erlef/setup-beam@v1
env:
ImageOS: ${{ matrix.versions.runner-os }}
with:
build-hash: ${{ steps.prepare.outputs.HASH }}
warnings-as-errors: 'true'
elixir-version: ${{ matrix.versions.elixir-version }}
otp-version: ${{ matrix.versions.otp-version }}
- name: Run Static Checks
uses: surgeventures/platform-tribe-actions/elixir/static-check@fast-elixir-repo-setup
id: static
version-type: strict
- name: Get SHA sum (HASH) of relevant files
id: hash
run: |
git config --global --add safe.directory /__w/${{ env.repository }}/${{ env.repository }}
echo "Get SHA sum (HASH) of relevant files"
HASH="$(git ls-tree ${{ env.SHA }} -- ${{ env.RELEVANT_FILES }} | sha1sum | cut -d' ' -f1)"
echo "BUILD HASH FOR THE CODEBASE IS: $HASH"
echo "HASH=$HASH" >> $GITHUB_OUTPUT
- name: Hex auth
run: mix hex.organization auth fresha --key ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
- uses: runs-on/cache@v4
id: deps-cache
with:
path: |
deps
_build/dev
key: ${{ runner.os }}-${{ matrix.versions.elixir-version }}-${{ matrix.versions.otp-version }}-precompile-deps-dev-${{ hashFiles('mix.lock') }}
- name: Install dependencies
if: steps.deps-cache.outputs.cache-hit != 'true'
env:
MIX_ENV: dev
run: |
echo "Installing dependencies"
mix deps.get
mix deps.compile
- uses: runs-on/cache@v4
id: build-cache
with:
dialyzer: true
hex-token: ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
path: "**/*"
key: ${{ runner.os }}-${{ matrix.versions.elixir-version }}-${{ matrix.versions.otp-version }}-compile-dev-${{ steps.hash.outputs.HASH }}
- name: Compile with warning as --warnings-as-errors
if: steps.build-cache.outputs.cache-hit != 'true'
run: |
echo "Compiling the app with --warnings-as-errors"
mix compile --warnings-as-errors --force
- name: Run credo
run: |
echo "Running credo"
mix credo --strict
- name: Run format
run: |
echo "Running format"
mix format --check-formatted --dry-run
- name: Run publish --dry-run
env:
HEX_API_KEY: ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
run: |
echo "Running publish --dry-run"
mix hex.publish --dry-run
test:
name: Unit Tests (Elixir ${{ matrix.versions.elixir-version }})
runs-on: runs-on,runner=1cpu-linux-x64
runs-on: runs-on,runner=2cpu-linux-x64
strategy:
fail-fast: false
matrix:
versions:
- { elixir-version: 1.16.2, otp-version: 26.2.5, runner-os: 'ubuntu22' }
- {
elixir-version: 1.16.2,
otp-version: 26.2.5,
runner-os: "ubuntu22",
}
steps:
- name: Checkout and compile dependencies
id: prepare
uses: surgeventures/platform-tribe-actions/elixir/precompile@fast-elixir-repo-setup
- name: Checkout latest codebase
uses: actions/checkout@v4
with:
repository: ${{ env.REPOSITORY }}
dependency-file: ${{ env.DEPENDENCY_FILE }}
sha: ${{ env.SHA }}
token: ${{ secrets.GITHUB_TOKEN }}
hex-token: ${{ secrets.HEX_ORGANIZATION_KEY }}
mix-env: test
relevant-files: ${{ env.RELEVANT_FILES }}
elixir-version: ${{ matrix.versions.elixir-version }}
otp-version: ${{ matrix.versions.otp-version }}
runner-os: ${{ matrix.versions.runner-os }}
- name: Compile the application
id: compile
uses: surgeventures/platform-tribe-actions/elixir/compile@fast-elixir-repo-setup
ref: ${{ env.SHA }}
clean: false
persist-credentials: true
- name: Setup Elixir
uses: erlef/setup-beam@v1
env:
ImageOS: ${{ matrix.versions.runner-os }}
with:
build-hash: ${{ steps.prepare.outputs.HASH }}
mix-env: test
elixir-version: ${{ matrix.versions.elixir-version }}
otp-version: ${{ matrix.versions.otp-version }}
- name: Run Unit Tests
uses: surgeventures/platform-tribe-actions/elixir/test@fast-elixir-repo-setup
id: test
version-type: strict
- name: Get SHA sum (HASH) of relevant files
id: hash
run: |
git config --global --add safe.directory /__w/${{ env.repository }}/${{ env.repository }}
echo "Get SHA sum (HASH) of relevant files"
HASH="$(git ls-tree ${{ env.SHA }} -- ${{ env.RELEVANT_FILES }} | sha1sum | cut -d' ' -f1)"
echo "BUILD HASH FOR THE CODEBASE IS: $HASH"
echo "HASH=$HASH" >> $GITHUB_OUTPUT
- name: Hex auth
run: mix hex.organization auth fresha --key ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
- uses: runs-on/cache@v4
id: deps-cache
with:
path: |
deps
_build/test
key: ${{ runner.os }}-${{ matrix.versions.elixir-version }}-${{ matrix.versions.otp-version }}-precompile-deps-test-${{ hashFiles('mix.lock') }}
- name: Install dependencies
if: steps.deps-cache.outputs.cache-hit != 'true'
env:
MIX_ENV: test
run: |
echo "Installing dependencies"
mix deps.get
mix deps.compile
- uses: runs-on/cache@v4
id: build-cache
with:
# Updated so that we are not forced to have 90% code
# coverage
test-params: ''
path: "**/*"
key: ${{ runner.os }}-${{ matrix.versions.elixir-version }}-${{ matrix.versions.otp-version }}-compile-test-${{ steps.hash.outputs.HASH }}
- name: Compile with MIX_ENV=test
if: steps.build-cache.outputs.cache-hit != 'true'
env:
MIX_ENV: test
run: |
echo "Compiling the app with MIX_ENV=test"
mix compile --force
- name: Run tests
run: |
echo "Running tests"
mix test --trace
permit:
name: Permit Package Publishing
needs: [static, test]
runs-on: runs-on,runner=1cpu-linux-x64
outputs:
PUBLISH: ${{ steps.permit.outputs.PUBLISH }}
PUBLISH: ${{ steps.version.outputs.PUBLISH }}
steps:
- name: Verify elibility for publishing the package
uses: surgeventures/platform-tribe-actions/elixir/permit@fast-elixir-repo-setup
id: permit
- name: Checkout latest codebase
uses: actions/checkout@v4
with:
repository: ${{ env.REPOSITORY }}
sha: ${{ env.SHA }}
relevant-files: ${{ env.RELEVANT_FILES}}
fetch-depth: 2
ref: ${{ env.SHA }}
clean: false
persist-credentials: true
- name: Create Approval File
shell: bash
run: |
echo "CI Checks Passed for SHA ${{ env.SHA }} and HASH ${{ needs.static.outputs.HASH }}" > approval.txt
- name: Process Package Version
shell: bash
id: version
run: |
echo "==============================================="
echo ""
git show HEAD~1:mix.exs > mix.old.exs
diff mix.old.exs mix.exs > diff.txt || true
old_version=$(grep -oP 'version: "\K[^"]+' mix.old.exs)
new_version=$(grep -oP 'version: "\K[^"]+' mix.exs)
echo "Old Version: $old_version | New Version: $new_version"
if [ "$new_version" != "$old_version" ]; then
if [ "$new_version" \> "$old_version" ]; then
echo "Version is upped - WILL publish upon merging the PR"
echo "PUBLISH=true" >> $GITHUB_OUTPUT
else
echo "Version is lower than the original version - blocking publication"
echo "PUBLISH=false" >> $GITHUB_OUTPUT
exit 1
fi
else
echo "PUBLISH=false" >> $GITHUB_OUTPUT
echo "Version is unchanged - WONT publish upon merging the PR"
fi
echo ""
echo "==============================================="
- name: Cache Approval File
uses: runs-on/cache/save@v4
with:
path: approval.txt
key: ${{ runner.os }}-${{ env.REPOSITORY }}-approval-${{ needs.static.outputs.HASH }}

publish:
name: Publish Hex Package
needs: [permit]
runs-on: runs-on,runner=2cpu-linux-x64
if: needs.permit.outputs.PUBLISH == 'true' && github.event_name == 'push'
steps:
- name: Publish Package
uses: surgeventures/platform-tribe-actions/elixir/publish@fast-elixir-repo-setup
- name: Checkout latest codebase
uses: actions/checkout@v4
with:
ref: ${{ env.SHA }}
clean: false
persist-credentials: true
- name: Setup Elixir
uses: erlef/setup-beam@v1
env:
ImageOS: ${{ env.RUNNER_OS }}
with:
repository: ${{ env.REPOSITORY }}
sha: ${{ env.SHA }}
token: ${{ secrets.GITHUB_TOKEN }}
hex-token: ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
elixir-version: ${{ env.ELIXIR_VERSION }}
otp-version: ${{ env.OTP_VERSION }}
runner-os: ${{ env.RUNNER_OS }}
version-type: strict
- name: Hex auth
run: mix hex.organization auth fresha --key ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
shell: bash
- name: Get dependencies
shell: bash
run: |
echo "Getting dependencies"
mix deps.get
- name: Publish dev package
shell: bash
env:
HEX_API_KEY: ${{ secrets.HEX_ORGANIZATION_WRITE_KEY }}
run: |
echo "Publishing package"
mix hex.publish --yes
Loading

0 comments on commit 0800c79

Please sign in to comment.