Compare commits
34 commits
Author | SHA1 | Date | |
---|---|---|---|
b647a84b8c | |||
531924f617 | |||
be7feff128 | |||
375f9c82df | |||
31cf0c6bdc | |||
05325c4ec7 | |||
fbd0de8f08 | |||
35182a58fd | |||
ff82195455 | |||
684a425442 | |||
98866615e3 | |||
de9e537018 | |||
7434e85666 | |||
c83b2d33ff | |||
877e7a28fe | |||
517d1634f2 | |||
138a2232c3 | |||
115f868341 | |||
7d0dbfe9d4 | |||
5b690b0494 | |||
f96140b926 | |||
fe42028a62 | |||
037992635c | |||
6c94cb95a5 | |||
905e45db4f | |||
5b1ef639d7 | |||
9b44964aeb | |||
d0407b40d2 | |||
6e0d6eddd2 | |||
075d1f1c95 | |||
612d831f4e | |||
0b859c709b | |||
17f1eb9015 | |||
6d60fff728 |
23 changed files with 479 additions and 185 deletions
382
.drone.yml
Normal file
382
.drone.yml
Normal file
|
@ -0,0 +1,382 @@
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: build
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: restore ASDF cache
|
||||||
|
image: meltwater/drone-cache
|
||||||
|
pull: "always"
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: ACCESS_KEY_ID
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: SECRET_ACCESS_KEY
|
||||||
|
AWS_PLUGIN_PATH_STYLE: true
|
||||||
|
settings:
|
||||||
|
restore: true
|
||||||
|
endpoint:
|
||||||
|
from_secret: S3_ENDPOINT
|
||||||
|
bucket:
|
||||||
|
from_secret: CACHE_BUCKET
|
||||||
|
region: us-east-1
|
||||||
|
path-style: true
|
||||||
|
cache_key: 'asdf-{{ os }}-{{ arch }}-{{ checksum ".tool-versions" }}'
|
||||||
|
mount:
|
||||||
|
- .asdf
|
||||||
|
|
||||||
|
- name: restore build cache
|
||||||
|
image: meltwater/drone-cache
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: ACCESS_KEY_ID
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: SECRET_ACCESS_KEY
|
||||||
|
AWS_PLUGIN_PATH_STYLE: true
|
||||||
|
settings:
|
||||||
|
restore: true
|
||||||
|
endpoint:
|
||||||
|
from_secret: S3_ENDPOINT
|
||||||
|
bucket:
|
||||||
|
from_secret: CACHE_BUCKET
|
||||||
|
region: us-east-1
|
||||||
|
path-style: true
|
||||||
|
cache_key: 'elixir-{{ checksum "mix.lock" }}-{{ checksum ".tool-versions" }}'
|
||||||
|
mount:
|
||||||
|
- deps
|
||||||
|
- _build
|
||||||
|
- .hex
|
||||||
|
- .mix
|
||||||
|
- .rebar3
|
||||||
|
|
||||||
|
- name: install dependencies
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
pull: "always"
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
ASDF_DIR: /root/.asdf
|
||||||
|
depends_on:
|
||||||
|
- restore ASDF cache
|
||||||
|
- restore build cache
|
||||||
|
commands:
|
||||||
|
- asdf_install
|
||||||
|
- rm -rf .asdf/downloads
|
||||||
|
- . $ASDF_DIR/asdf.sh
|
||||||
|
- mix local.hex --if-missing --force
|
||||||
|
- mix local.rebar --if-missing --force
|
||||||
|
- mix deps.get
|
||||||
|
- mix deps.compile
|
||||||
|
- mix dialyzer --plt
|
||||||
|
|
||||||
|
- name: store ASDF cache
|
||||||
|
image: meltwater/drone-cache
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: ACCESS_KEY_ID
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: SECRET_ACCESS_KEY
|
||||||
|
AWS_PLUGIN_PATH_STYLE: true
|
||||||
|
depends_on:
|
||||||
|
- install dependencies
|
||||||
|
settings:
|
||||||
|
rebuild: true
|
||||||
|
override: false
|
||||||
|
endpoint:
|
||||||
|
from_secret: S3_ENDPOINT
|
||||||
|
bucket:
|
||||||
|
from_secret: CACHE_BUCKET
|
||||||
|
region: us-east-1
|
||||||
|
path-style: true
|
||||||
|
cache_key: 'asdf-{{ os }}-{{ arch }}-{{ checksum ".tool-versions" }}'
|
||||||
|
mount:
|
||||||
|
- .asdf
|
||||||
|
|
||||||
|
- name: store build cache
|
||||||
|
image: meltwater/drone-cache
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: ACCESS_KEY_ID
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: SECRET_ACCESS_KEY
|
||||||
|
AWS_PLUGIN_PATH_STYLE: true
|
||||||
|
depends_on:
|
||||||
|
- install dependencies
|
||||||
|
settings:
|
||||||
|
rebuild: true
|
||||||
|
override: false
|
||||||
|
endpoint:
|
||||||
|
from_secret: S3_ENDPOINT
|
||||||
|
bucket:
|
||||||
|
from_secret: CACHE_BUCKET
|
||||||
|
region: us-east-1
|
||||||
|
path-style: true
|
||||||
|
cache_key: 'elixir-{{ checksum "mix.lock" }}-{{ checksum ".tool-versions" }}'
|
||||||
|
mount:
|
||||||
|
- deps
|
||||||
|
- _build
|
||||||
|
- .hex
|
||||||
|
- .mix
|
||||||
|
- .rebar3
|
||||||
|
|
||||||
|
- name: mix compile
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- install dependencies
|
||||||
|
commands:
|
||||||
|
- asdf mix compile --warnings-as-errors
|
||||||
|
|
||||||
|
- name: mix test
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix test
|
||||||
|
|
||||||
|
- name: mix credo
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix credo --strict
|
||||||
|
|
||||||
|
- name: mix dialyzer
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix dialyzer
|
||||||
|
|
||||||
|
- name: mix hex.audit
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix hex.audit
|
||||||
|
|
||||||
|
- name: mix format
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix format --check-formatted
|
||||||
|
|
||||||
|
- name: mix deps.unlock
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix deps.unlock --check-unused
|
||||||
|
|
||||||
|
- name: mix doctor
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- asdf mix doctor --full
|
||||||
|
|
||||||
|
- name: mix git_ops.check_message
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
depends_on:
|
||||||
|
- mix compile
|
||||||
|
commands:
|
||||||
|
- git log -1 --format=%s > .last_commit_message
|
||||||
|
- asdf mix git_ops.check_message .last_commit_message
|
||||||
|
|
||||||
|
- name: mix git_ops.release
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
event:
|
||||||
|
exclude:
|
||||||
|
- pull_request
|
||||||
|
depends_on:
|
||||||
|
- mix test
|
||||||
|
- mix credo
|
||||||
|
- mix dialyzer
|
||||||
|
- mix hex.audit
|
||||||
|
- mix format
|
||||||
|
- mix deps.unlock
|
||||||
|
- mix doctor
|
||||||
|
- mix git_ops.check_message
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
ASDF_DIR: /root/.asdf
|
||||||
|
DRONE_TOKEN:
|
||||||
|
from_secret: DRONE_TOKEN
|
||||||
|
commands:
|
||||||
|
- git fetch --tags
|
||||||
|
- . $ASDF_DIR/asdf.sh
|
||||||
|
- mix git_ops.project_info --format=shell > before.env
|
||||||
|
- mix git_ops.release --yes --no-major || true
|
||||||
|
- mix git_ops.project_info --format=shell > after.env
|
||||||
|
- . ./before.env
|
||||||
|
- export OLD_APP_VERSION=$${APP_VERSION}
|
||||||
|
- . ./after.env
|
||||||
|
- export NEW_APP_VERSION=$${APP_VERSION}
|
||||||
|
- if [ "v$${OLD_APP_VERSION}" != "v$${NEW_APP_VERSION}" ]; then
|
||||||
|
- export GIT_URL=$(echo $DRONE_GIT_HTTP_URL | sed -e "s/:\\/\\//:\\/\\/$DRONE_REPO_OWNER:$DRONE_TOKEN@/")
|
||||||
|
- git push $${GIT_URL} "HEAD:${DRONE_COMMIT_REF}" "refs/tags/v$${NEW_APP_VERSION}"
|
||||||
|
- fi
|
||||||
|
|
||||||
|
- name: build artifacts
|
||||||
|
image: harton.dev/james/asdf_container:latest
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- tag
|
||||||
|
refs:
|
||||||
|
include:
|
||||||
|
- refs/tags/v*
|
||||||
|
depends_on:
|
||||||
|
- mix test
|
||||||
|
- mix credo
|
||||||
|
- mix dialyzer
|
||||||
|
- mix hex.audit
|
||||||
|
- mix format
|
||||||
|
- mix deps.unlock
|
||||||
|
- mix doctor
|
||||||
|
- mix git_ops.check_message
|
||||||
|
environment:
|
||||||
|
MIX_ENV: test
|
||||||
|
HEX_HOME: /drone/src/.hex
|
||||||
|
MIX_HOME: /drone/src/.mix
|
||||||
|
REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
ASDF_DIR: /root/.asdf
|
||||||
|
commands:
|
||||||
|
- . $ASDF_DIR/asdf.sh
|
||||||
|
- mix git_ops.project_info --format=shell > app.env
|
||||||
|
- . ./app.env
|
||||||
|
- mkdir artifacts
|
||||||
|
- mix hex.build -o "artifacts/$${APP_NAME}-$${APP_VERSION}-pkg.tar"
|
||||||
|
- gzip "artifacts/$${APP_NAME}-$${APP_VERSION}-pkg.tar"
|
||||||
|
- mix docs
|
||||||
|
- tar zcvf "artifacts/$${APP_NAME}-$${APP_VERSION}-docs.tar.gz" doc/
|
||||||
|
- git tag -l --format='%(contents:subject)' v$${APP_VERSION} > tag_subject
|
||||||
|
- git tag -l --format='%(contents:body)' v$${APP_VERSION} > tag_body
|
||||||
|
|
||||||
|
- name: gitea release
|
||||||
|
image: plugins/gitea-release
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- tag
|
||||||
|
refs:
|
||||||
|
include:
|
||||||
|
- refs/tags/v*
|
||||||
|
depends_on:
|
||||||
|
- build artifacts
|
||||||
|
settings:
|
||||||
|
api_key:
|
||||||
|
from_secret: DRONE_TOKEN
|
||||||
|
base_url: https://harton.dev
|
||||||
|
files: artifacts/*.tar.gz
|
||||||
|
checksum: sha256
|
||||||
|
title: tag_subject
|
||||||
|
note: tag_body
|
||||||
|
|
||||||
|
- name: docs release
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- tag
|
||||||
|
refs:
|
||||||
|
include:
|
||||||
|
- refs/tags/v*
|
||||||
|
image: minio/mc
|
||||||
|
environment:
|
||||||
|
S3_ENDPOINT:
|
||||||
|
from_secret: S3_ENDPOINT
|
||||||
|
ACCESS_KEY:
|
||||||
|
from_secret: ACCESS_KEY_ID
|
||||||
|
SECRET_KEY:
|
||||||
|
from_secret: SECRET_ACCESS_KEY
|
||||||
|
depends_on:
|
||||||
|
- build artifacts
|
||||||
|
commands:
|
||||||
|
- mc alias set store $${S3_ENDPOINT} $${ACCESS_KEY} $${SECRET_KEY}
|
||||||
|
- mc mb -p store/docs.harton.nz
|
||||||
|
- mc mirror --overwrite doc/ store/docs.harton.nz/$${DRONE_REPO}/$${DRONE_TAG}
|
||||||
|
- mc mirror --overwrite doc/ store/docs.harton.nz/$${DRONE_REPO}
|
||||||
|
|
||||||
|
# - name: hex release
|
||||||
|
# image: harton.dev/james/asdf_container:latest
|
||||||
|
# when:
|
||||||
|
# event:
|
||||||
|
# - tag
|
||||||
|
# refs:
|
||||||
|
# include:
|
||||||
|
# - refs/tags/v*
|
||||||
|
# depends_on:
|
||||||
|
# - build artifacts
|
||||||
|
# environment:
|
||||||
|
# MIX_ENV: test
|
||||||
|
# HEX_HOME: /drone/src/.hex
|
||||||
|
# MIX_HOME: /drone/src/.mix
|
||||||
|
# REBAR_BASE_DIR: /drone/src/.rebar3
|
||||||
|
# ASDF_DATA_DIR: /drone/src/.asdf
|
||||||
|
# ASDF_DIR: /root/.asdf
|
||||||
|
# HEX_API_KEY:
|
||||||
|
# from_secret: HEX_API_KEY
|
||||||
|
# commands:
|
||||||
|
# - . $ASDF_DIR/asdf.sh
|
||||||
|
# - mix hex.publish --yes
|
138
.gitlab-ci.yml
138
.gitlab-ci.yml
|
@ -1,138 +0,0 @@
|
||||||
stages:
|
|
||||||
- build
|
|
||||||
- test
|
|
||||||
- release
|
|
||||||
|
|
||||||
variables:
|
|
||||||
MIX_ENV: "test"
|
|
||||||
PACKAGE_REGISTRY_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/"
|
|
||||||
HEX_HOME: "$CI_PROJECT_DIR/.hex"
|
|
||||||
MIX_HOME: "$CI_PROJECT_DIR/.mix"
|
|
||||||
|
|
||||||
build:
|
|
||||||
image: elixir:latest
|
|
||||||
stage: build
|
|
||||||
cache:
|
|
||||||
key: "$CI_JOB_NAME"
|
|
||||||
paths:
|
|
||||||
- deps
|
|
||||||
- _build
|
|
||||||
- .hex
|
|
||||||
- .mix
|
|
||||||
script:
|
|
||||||
- mix local.hex --force
|
|
||||||
- mix local.rebar --force
|
|
||||||
- mix deps.get
|
|
||||||
- mix deps.compile
|
|
||||||
- mix git_ops.project_info -f dotenv > project_info.env
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- _build/
|
|
||||||
- deps/
|
|
||||||
- .hex
|
|
||||||
- .mix
|
|
||||||
reports:
|
|
||||||
dotenv: project_info.env
|
|
||||||
|
|
||||||
test:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- mix test
|
|
||||||
|
|
||||||
credo:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- mix credo
|
|
||||||
|
|
||||||
audit:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- mix hex.audit
|
|
||||||
|
|
||||||
format:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: test
|
|
||||||
script:
|
|
||||||
- mix format --check-formatted
|
|
||||||
|
|
||||||
pages:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: release
|
|
||||||
script:
|
|
||||||
- mix docs -o public
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- public
|
|
||||||
only:
|
|
||||||
- main
|
|
||||||
|
|
||||||
git_ops:
|
|
||||||
image: elixir:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: release
|
|
||||||
only:
|
|
||||||
refs:
|
|
||||||
- main
|
|
||||||
except:
|
|
||||||
variables:
|
|
||||||
- $CI_COMMIT_MESSAGE =~ /chore\:\ release version/
|
|
||||||
script:
|
|
||||||
- |
|
|
||||||
export OLD_APP_VERSION=$APP_VERSION
|
|
||||||
mkdir -p artifacts
|
|
||||||
git config --global user.name "Gitlab Runner for ${GITLAB_USER_NAME}"
|
|
||||||
git config --global user.email "${GITLAB_USER_EMAIL}"
|
|
||||||
mix git_ops.release --yes || true
|
|
||||||
mix git_ops.project_info -f shell > artifacts/env
|
|
||||||
source artifacts/env
|
|
||||||
if [ "v${OLD_APP_VERSION}" != "v${APP_VERSION}" ]; then
|
|
||||||
mix hex.build -o "artifacts/${APP_NAME}-${APP_VERSION}.tar"
|
|
||||||
gzip "artifacts/${APP_NAME}-${APP_VERSION}.tar"
|
|
||||||
mix docs && tar zcvf "artifacts/${APP_NAME}-${APP_VERSION}-docs.tar.gz" doc/
|
|
||||||
curl --header "JOB_TOKEN: ${CI_JOB_TOKEN}" --upload-file "artifacts/${APP_NAME}-${APP_VERSION}.tar.gz" "${PACKAGE_REGISTRY_URL}/${APP_NAME}/${APP_VERSION}/${APP_NAME}-${APP_VERSION}.tar.gz"
|
|
||||||
curl --header "JOB_TOKEN: ${CI_JOB_TOKEN}" --upload-file "artifacts/${APP_NAME}-${APP_VERSION}-docs.tar.gz" "${PACKAGE_REGISTRY_URL}/${APP_NAME}/${APP_VERSION}/${APP_NAME}-${APP_VERSION}-docs.tar.gz"
|
|
||||||
git push "https://project_${CI_PROJECT_ID}_bot:${RELEASE_TOKEN}@gitlab.com/${CI_PROJECT_PATH}.git" "HEAD:${CI_COMMIT_REF_NAME}" "refs/tags/v${APP_VERSION}"
|
|
||||||
fi
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- artifacts/*
|
|
||||||
|
|
||||||
release-gitlab:
|
|
||||||
image: registry.gitlab.com/gitlab-org/release-cli:latest
|
|
||||||
dependencies:
|
|
||||||
- build
|
|
||||||
stage: release
|
|
||||||
only:
|
|
||||||
- tags
|
|
||||||
- /^v\d+\.\d+\.\d+(-\w+)?$/
|
|
||||||
script:
|
|
||||||
- release-cli create \
|
|
||||||
--name "Release ${APP_NAME} ${APP_VERSION}" \
|
|
||||||
--description "./CHANGELOG.md" \
|
|
||||||
--tag-name "v${APP_VERSION}" \
|
|
||||||
--assets-link "{\"name\":\"${APP_NAME}-${APP_VERSION}.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/${APP_NAME}/${APP_VERSION}/${APP_NAME}-${APP_VERSION}.tar.gz\"}" \
|
|
||||||
--assets-link "{\"name\":\"${APP_NAME}-${APP_VERSION}-docs.tar.gz\",\"url\":\"${PACKAGE_REGISTRY_URL}/${APP_NAME}/${APP_VERSION}/${APP_NAME}-${APP_VERSION}-docs.tar.gz\"}"
|
|
||||||
# release-hex:
|
|
||||||
# image: elixir:latest
|
|
||||||
# dependencies:
|
|
||||||
# - build
|
|
||||||
# stage: release
|
|
||||||
# only:
|
|
||||||
# - tags
|
|
||||||
# - /^v\d+\.\d+\.\d+(-\w+)?$/
|
|
||||||
# script:
|
|
||||||
# - mix hex.publish --yes
|
|
2
.tool-versions
Normal file
2
.tool-versions
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
erlang 27.1
|
||||||
|
elixir 1.17.3
|
19
CHANGELOG.md
19
CHANGELOG.md
|
@ -5,18 +5,19 @@ See [Conventional Commits](Https://conventionalcommits.org) for commit guideline
|
||||||
|
|
||||||
<!-- changelog -->
|
<!-- changelog -->
|
||||||
|
|
||||||
## [v1.0.0](https://gitlab.com/jimsy/kinemat/compare/v0.1.0...v1.0.0) (2023-01-16)
|
## [v1.0.1](https://harton.dev/james/kinemat/compare/v1.0.0...v1.0.1) (2024-02-23)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v1.0.0](https://harton.dev/james/kinemat/compare/v0.1.0...v1.0.0) (2023-01-16)
|
||||||
|
|
||||||
### Breaking Changes:
|
### Breaking Changes:
|
||||||
|
|
||||||
* Relicense to HL3-FULL.
|
- Relicense to HL3-FULL.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [v0.1.0](https://gitlab.com/jimsy/kinemat/compare/v0.1.0...v0.1.0) (2021-05-23)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [v0.1.0](https://harton.dev/james/kinemat/compare/v0.1.0...v0.1.0) (2021-05-23)
|
||||||
|
|
||||||
### Bug Fixes:
|
### Bug Fixes:
|
||||||
|
|
||||||
* docs: fix compiler warnings caused by documentation typos.
|
- docs: fix compiler warnings caused by documentation typos.
|
||||||
|
|
17
README.md
17
README.md
|
@ -1,3 +1,6 @@
|
||||||
|
[![Build Status](https://drone.harton.dev/api/badges/james/kinemat/status.svg)](https://drone.harton.dev/james/kinemat)
|
||||||
|
[![Hippocratic License HL3-FULL](https://img.shields.io/static/v1?label=Hippocratic%20License&message=HL3-FULL&labelColor=5e2751&color=bc8c3d)](https://firstdonoharm.dev/version/3/0/full.html)
|
||||||
|
|
||||||
# Kinemat
|
# Kinemat
|
||||||
|
|
||||||
Kinemat is the beginnings of a library for solving forward and reverse
|
Kinemat is the beginnings of a library for solving forward and reverse
|
||||||
|
@ -13,10 +16,12 @@ For now, you can install it as a Git dependency:
|
||||||
|
|
||||||
```elixir
|
```elixir
|
||||||
def deps do
|
def deps do
|
||||||
[{:kinemat, "~> 1.0.0"}]
|
[{:kinemat, "~> 1.0.1"}]
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Docs are available on [docs.harton.nz](https://docs.harton.nz/james/kinemat).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
### Representing angles regardless of unit
|
### Representing angles regardless of unit
|
||||||
|
@ -32,7 +37,7 @@ information.
|
||||||
### Representing spacial coordinates
|
### Representing spacial coordinates
|
||||||
|
|
||||||
Kinemat uses the `Point` protocol to handle manipulations of spacial
|
Kinemat uses the `Point` protocol to handle manipulations of spacial
|
||||||
coordinates. The protocol is implemented by `Cartesian`, `Cylindrical` and
|
coordinates. The protocol is implemented by `Cartesian`, `Cylindrical` and
|
||||||
`Spherical`.
|
`Spherical`.
|
||||||
|
|
||||||
iex> use Kinemat
|
iex> use Kinemat
|
||||||
|
@ -116,6 +121,12 @@ Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_do
|
||||||
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
and published on [HexDocs](https://hexdocs.pm). Once published, the docs can
|
||||||
be found at [https://hexdocs.pm/kinemat](https://hexdocs.pm/kinemat).
|
be found at [https://hexdocs.pm/kinemat](https://hexdocs.pm/kinemat).
|
||||||
|
|
||||||
|
## Github Mirror
|
||||||
|
|
||||||
|
This repository is mirrored [on Github](https://github.com/jimsynz/kinemat)
|
||||||
|
from it's primary location [on my Forgejo instance](https://harton.dev/james/kinemat).
|
||||||
|
Feel free to raise issues and open PRs on Github.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
This software is licensed under the terms of the
|
This software is licensed under the terms of the
|
||||||
|
@ -123,7 +134,7 @@ This software is licensed under the terms of the
|
||||||
this package for the terms.
|
this package for the terms.
|
||||||
|
|
||||||
This license actively proscribes this software being used by and for some
|
This license actively proscribes this software being used by and for some
|
||||||
industries, countries and activities. If your usage of this software doesn't
|
industries, countries and activities. If your usage of this software doesn't
|
||||||
comply with the terms of this license, then [contact me](mailto:james@harton.nz)
|
comply with the terms of this license, then [contact me](mailto:james@harton.nz)
|
||||||
with the details of your use-case to organise the purchase of a license - the
|
with the details of your use-case to organise the purchase of a license - the
|
||||||
cost of which may include a donation to a suitable charity or NGO.
|
cost of which may include a donation to a suitable charity or NGO.
|
||||||
|
|
|
@ -3,7 +3,7 @@ import Config
|
||||||
config :git_ops,
|
config :git_ops,
|
||||||
mix_project: Mix.Project.get!(),
|
mix_project: Mix.Project.get!(),
|
||||||
changelog_file: "CHANGELOG.md",
|
changelog_file: "CHANGELOG.md",
|
||||||
repository_url: "https://gitlab.com/jimsy/kinemat",
|
repository_url: "https://harton.dev/james/kinemat",
|
||||||
manage_mix_version?: true,
|
manage_mix_version?: true,
|
||||||
manage_readme_version: "README.md",
|
manage_readme_version: "README.md",
|
||||||
version_tag_prefix: "v"
|
version_tag_prefix: "v"
|
||||||
|
|
|
@ -7,6 +7,7 @@ defimpl Inspect, for: Kinemat.Coordinates.Cartesian do
|
||||||
angle =
|
angle =
|
||||||
angle
|
angle
|
||||||
|> Map.from_struct()
|
|> Map.from_struct()
|
||||||
|
|> Enum.sort_by(&elem(&1, 0))
|
||||||
|> Enum.into([])
|
|> Enum.into([])
|
||||||
|
|
||||||
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
||||||
|
|
|
@ -7,6 +7,7 @@ defimpl Inspect, for: Kinemat.Coordinates.Cylindrical do
|
||||||
angle =
|
angle =
|
||||||
angle
|
angle
|
||||||
|> Map.from_struct()
|
|> Map.from_struct()
|
||||||
|
|> Enum.sort_by(&elem(&1, 0))
|
||||||
|> Enum.into([])
|
|> Enum.into([])
|
||||||
|
|
||||||
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
||||||
|
|
|
@ -6,6 +6,7 @@ defimpl Inspect, for: Kinemat.Coordinates.Spherical do
|
||||||
angle =
|
angle =
|
||||||
angle
|
angle
|
||||||
|> Map.from_struct()
|
|> Map.from_struct()
|
||||||
|
|> Enum.sort_by(&elem(&1, 0))
|
||||||
|> Enum.into([])
|
|> Enum.into([])
|
||||||
|
|
||||||
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
concat(["#Kinemat.Point<", to_doc(angle, opts), ">"])
|
||||||
|
|
|
@ -32,7 +32,7 @@ defmodule Kinemat.Coordinates.Cylindrical do
|
||||||
@doc """
|
@doc """
|
||||||
Alias for `radial/1`.
|
Alias for `radial/1`.
|
||||||
"""
|
"""
|
||||||
@spec rho(t) :: number
|
@spec rho(t) :: Angle.t()
|
||||||
def rho(point), do: point |> azimuth()
|
def rho(point), do: point |> azimuth()
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
|
|
|
@ -3,13 +3,13 @@ defmodule Kinemat.Coordinates.Spherical do
|
||||||
defstruct ~w(radial azimuth polar)a
|
defstruct ~w(radial azimuth polar)a
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Describes a point in 3D space using sperical notation (r,θ,ɸ).
|
Describes a point in 3D space using spherical notation (r,θ,ɸ).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@type t :: %Spherical{radial: number, azimuth: Angle.t(), polar: Angle.t()}
|
@type t :: %Spherical{radial: number, azimuth: Angle.t(), polar: Angle.t()}
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Initialise a sperical coordinate point from `rho`, `theta` and `phi` (r,θ,ɸ).
|
Initialise a spherical coordinate point from `rho`, `theta` and `phi` (r,θ,ɸ).
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|
|
@ -23,8 +23,8 @@ defmodule Kinemat.HomogeneousTransformation do
|
||||||
...> Frame.init(point, orientation)
|
...> Frame.init(point, orientation)
|
||||||
...> |> Kinemat.HomogeneousTransformation.to_homogeneous_transformation()
|
...> |> Kinemat.HomogeneousTransformation.to_homogeneous_transformation()
|
||||||
{1.0, 0.0, 0.0, 0.0,
|
{1.0, 0.0, 0.0, 0.0,
|
||||||
0.0, 1.0, 0.0, 0.0,
|
-0.0, 1.0, 0.0, 0.0,
|
||||||
0.0, 0.0, 1.0, 0.0,
|
0.0, -0.0, 1.0, 0.0,
|
||||||
0.0, 0.0, 0.0, 1.0}
|
0.0, 0.0, 0.0, 1.0}
|
||||||
"""
|
"""
|
||||||
@spec to_homogeneous_transformation(Frame.t()) :: t
|
@spec to_homogeneous_transformation(Frame.t()) :: t
|
||||||
|
|
|
@ -47,8 +47,8 @@ defmodule Kinemat.Joints.Cylindrical do
|
||||||
def init(%Frame{} = frame, []), do: init(frame)
|
def init(%Frame{} = frame, []), do: init(frame)
|
||||||
|
|
||||||
def init(%Frame{} = frame, options) when is_list(options) do
|
def init(%Frame{} = frame, options) when is_list(options) do
|
||||||
rlimits = Keyword.fetch(options, :rotation_limits)
|
rlimits = Keyword.get(options, :rotation_limits)
|
||||||
tlimits = Keyword.fetch(options, :translation_limits)
|
tlimits = Keyword.get(options, :translation_limits)
|
||||||
|
|
||||||
crot =
|
crot =
|
||||||
case rlimits do
|
case rlimits do
|
||||||
|
|
|
@ -8,7 +8,11 @@ defmodule Kinemat.Joints.Revolute do
|
||||||
Describes a [Revolute](https://en.wikipedia.org/wiki/Revolute_joint) (AKA Hinged) joint.
|
Describes a [Revolute](https://en.wikipedia.org/wiki/Revolute_joint) (AKA Hinged) joint.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@type t :: %Revolute{frame: Frame.t(), limits: nil | Join.rotation_limit(), position: Angle.t()}
|
@type t :: %Revolute{
|
||||||
|
frame: Frame.t(),
|
||||||
|
limits: nil | Joint.rotation_limit(),
|
||||||
|
position: Angle.t()
|
||||||
|
}
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Initialize a new revolute joint from a reference frame.
|
Initialize a new revolute joint from a reference frame.
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
defprotocol Kinemat.Orientation do
|
defprotocol Kinemat.Orientation do
|
||||||
alias Kinemat.{Orientation, Euler, RotationMatrix, Quaternion}
|
alias Kinemat.{
|
||||||
|
Orientation,
|
||||||
|
Orientations.Euler,
|
||||||
|
Orientations.RotationMatrix,
|
||||||
|
Orientations.Quaternion
|
||||||
|
}
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
The Orientation protocol is used to convert between and manipulate the
|
The Orientation protocol is used to convert between and manipulate the
|
||||||
|
|
|
@ -48,7 +48,7 @@ defimpl Kinemat.Orientation, for: Kinemat.Orientations.RotationMatrix do
|
||||||
@spec to_euler(RotationMatrix.t()) :: Euler.t()
|
@spec to_euler(RotationMatrix.t()) :: Euler.t()
|
||||||
def to_euler(orientation), do: RotationMatrix.ToEuler.to_euler(orientation, :xyz)
|
def to_euler(orientation), do: RotationMatrix.ToEuler.to_euler(orientation, :xyz)
|
||||||
|
|
||||||
@spec to_euler(RotationMatrix.t(), Euler.valid_orientation()) :: Euler.t()
|
@spec to_euler(RotationMatrix.t(), Euler.valid_representation()) :: Euler.t()
|
||||||
def to_euler(orientation, representation),
|
def to_euler(orientation, representation),
|
||||||
do: RotationMatrix.ToEuler.to_euler(orientation, representation)
|
do: RotationMatrix.ToEuler.to_euler(orientation, representation)
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
defprotocol Kinemat.Point do
|
defprotocol Kinemat.Point do
|
||||||
alias Kinemat.{Point, Cartesian, Cylindrical, Spherical}
|
alias Kinemat.{Point, Coordinates.Cartesian, Coordinates.Cylindrical, Coordinates.Spherical}
|
||||||
|
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Describes a Point in 3 dimensional space.
|
Describes a Point in 3 dimensional space.
|
||||||
|
|
|
@ -35,7 +35,7 @@ defimpl Kinemat.Point, for: Kinemat.Coordinates.Cartesian do
|
||||||
end
|
end
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Converts the cartesian coordiantes to sperical coordinates.
|
Converts the cartesian coordinates to spherical coordinates.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ defimpl Kinemat.Point, for: Kinemat.Coordinates.Cartesian do
|
||||||
azimuth: %Angle{r: 0.4234308319224211},
|
azimuth: %Angle{r: 0.4234308319224211},
|
||||||
polar: %Angle{r: 0.982793723247329}}
|
polar: %Angle{r: 0.982793723247329}}
|
||||||
"""
|
"""
|
||||||
@spec to_spherical(Cartesian.t()) :: Sperical.t()
|
@spec to_spherical(Cartesian.t()) :: Spherical.t()
|
||||||
def to_spherical(%Cartesian{x: x, y: y, z: z}) do
|
def to_spherical(%Cartesian{x: x, y: y, z: z}) do
|
||||||
rho = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))
|
rho = sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2))
|
||||||
theta = Radian.init(acos(z / rho))
|
theta = Radian.init(acos(z / rho))
|
||||||
|
|
|
@ -7,7 +7,7 @@ defimpl Kinemat.Point, for: Kinemat.Coordinates.Spherical do
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@doc """
|
@doc """
|
||||||
Convert a point in sperical space into cylindrical space.
|
Convert a point in spherical space into cylindrical space.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
|
|
@ -3,16 +3,22 @@ defmodule Kinemat.Trig do
|
||||||
A simple wrapper around `Angle`'s trig functions for compatibility.
|
A simple wrapper around `Angle`'s trig functions for compatibility.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec sin(Angle.t()) :: number
|
||||||
def sin(%Angle{} = angle) do
|
def sin(%Angle{} = angle) do
|
||||||
{_, result} = Angle.sin(angle)
|
{_, result} = Angle.sin(angle)
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec cos(Angle.t()) :: number
|
||||||
def cos(%Angle{} = angle) do
|
def cos(%Angle{} = angle) do
|
||||||
{_, result} = Angle.cos(angle)
|
{_, result} = Angle.cos(angle)
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc false
|
||||||
|
@spec tan(Angle.t()) :: number
|
||||||
def tan(%Angle{} = angle) do
|
def tan(%Angle{} = angle) do
|
||||||
{_, result} = Angle.tan(angle)
|
{_, result} = Angle.tan(angle)
|
||||||
result
|
result
|
||||||
|
|
22
mix.exs
22
mix.exs
|
@ -5,7 +5,7 @@ defmodule Kinemat.Mixfile do
|
||||||
Forward and reverse kinematics for robotics and simulations.
|
Forward and reverse kinematics for robotics and simulations.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@version "1.0.0"
|
@version "1.0.1"
|
||||||
|
|
||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
|
@ -15,7 +15,11 @@ defmodule Kinemat.Mixfile do
|
||||||
start_permanent: Mix.env() == :prod,
|
start_permanent: Mix.env() == :prod,
|
||||||
package: package(),
|
package: package(),
|
||||||
deps: deps(),
|
deps: deps(),
|
||||||
description: @description
|
description: @description,
|
||||||
|
docs: [
|
||||||
|
main: "readme",
|
||||||
|
extras: ["README.md", "CHANGELOG.md"]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -24,7 +28,10 @@ defmodule Kinemat.Mixfile do
|
||||||
maintainers: ["James Harton <james@harton.nz>"],
|
maintainers: ["James Harton <james@harton.nz>"],
|
||||||
licenses: ["HL3-FULL"],
|
licenses: ["HL3-FULL"],
|
||||||
links: %{
|
links: %{
|
||||||
"Source" => "https://gitlab.com/jimsy/kinemat"
|
"Source" => "https://harton.dev/james/kinemat",
|
||||||
|
"GitHub" => "https://github.com/jimsynz/kinemat",
|
||||||
|
"Changelog" => "https://docs.harton.nz/james/kinemat/changelog.html",
|
||||||
|
"Sponsor" => "https://github.com/sponsors/jimsynz"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
@ -40,9 +47,12 @@ defmodule Kinemat.Mixfile do
|
||||||
defp deps do
|
defp deps do
|
||||||
[
|
[
|
||||||
{:angle, ">= 0.3.0"},
|
{:angle, ">= 0.3.0"},
|
||||||
{:credo, "~> 1.6", only: ~w(dev test)a, runtime: false},
|
{:credo, "~> 1.6", only: ~w[dev test]a, runtime: false},
|
||||||
{:ex_doc, "~> 0.29", only: ~w(dev test)a},
|
{:dialyxir, "~> 1.4", only: ~w[dev test]a, runtime: false},
|
||||||
{:earmark, "~> 1.4", only: ~w(dev test)a},
|
{:doctor, "~> 0.21", only: ~w[dev test]a, runtime: false},
|
||||||
|
{:earmark, "~> 1.4", only: ~w[dev test]a, runtime: false},
|
||||||
|
{:ex_check, "~> 0.16", only: ~w[dev test]a, runtime: false},
|
||||||
|
{:ex_doc, "~> 0.30", only: ~w[dev test]a, runtime: false},
|
||||||
{:git_ops, "~> 2.4", only: ~w[dev test]a, runtime: false},
|
{:git_ops, "~> 2.4", only: ~w[dev test]a, runtime: false},
|
||||||
{:graphmath, "~> 2.5"}
|
{:graphmath, "~> 2.5"}
|
||||||
]
|
]
|
||||||
|
|
31
mix.lock
31
mix.lock
|
@ -1,17 +1,22 @@
|
||||||
%{
|
%{
|
||||||
"angle": {:hex, :angle, "0.3.0", "00405e6f80a7c34210a031ab1d13dd5222e0651f6abe4350a568375faebaefae", [:mix], [], "hexpm", "3c5ad1253d761fcb6234ccaafae004efdf4ee8297687bb4b08e2b93f2e1cf208"},
|
"angle": {:hex, :angle, "1.0.1", "9567f27b9ec4df12ef85c39faf8f6b797a247a6af484ba9974c4d65cb154b055", [:mix], [], "hexpm", "902b5c37b58c0aa61b3b09cd969ba323e822454081cf636904f0aa4746d690fd"},
|
||||||
"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"},
|
"bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"},
|
||||||
"credo": {:hex, :credo, "1.6.1", "7dc76dcdb764a4316c1596804c48eada9fff44bd4b733a91ccbf0c0f368be61e", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "698607fb5993720c7e93d2d8e76f2175bba024de964e160e2f7151ef3ab82ac5"},
|
"credo": {:hex, :credo, "1.7.7", "771445037228f763f9b2afd612b6aa2fd8e28432a95dbbc60d8e03ce71ba4446", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8bc87496c9aaacdc3f90f01b7b0582467b69b4bd2441fe8aae3109d843cc2f2e"},
|
||||||
"earmark": {:hex, :earmark, "1.4.19", "3854a17305c880cc46305af15fb1630568d23a709aba21aaa996ced082fc29d7", [:mix], [{:earmark_parser, ">= 1.4.18", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "d5a8c9f9e37159a8fdd3ea8437fb4e229eaf56d5129b9a011dc4780a4872079d"},
|
"decimal": {:hex, :decimal, "2.1.1", "5611dca5d4b2c3dd497dec8f68751f1f1a54755e8ed2a966c2633cf885973ad6", [:mix], [], "hexpm", "53cfe5f497ed0e7771ae1a475575603d77425099ba5faef9394932b35020ffcc"},
|
||||||
"earmark_parser": {:hex, :earmark_parser, "1.4.28", "0bf6546eb7cd6185ae086cbc5d20cd6dbb4b428aad14c02c49f7b554484b4586", [:mix], [], "hexpm", "501cef12286a3231dc80c81352a9453decf9586977f917a96e619293132743fb"},
|
"dialyxir": {:hex, :dialyxir, "1.4.3", "edd0124f358f0b9e95bfe53a9fcf806d615d8f838e2202a9f430d59566b6b53b", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "bf2cfb75cd5c5006bec30141b131663299c661a864ec7fbbc72dfa557487a986"},
|
||||||
"ex_doc": {:hex, :ex_doc, "0.29.0", "4a1cb903ce746aceef9c1f9ae8a6c12b742a5461e6959b9d3b24d813ffbea146", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "f096adb8bbca677d35d278223361c7792d496b3fc0d0224c9d4bc2f651af5db1"},
|
"doctor": {:hex, :doctor, "0.21.0", "20ef89355c67778e206225fe74913e96141c4d001cb04efdeba1a2a9704f1ab5", [:mix], [{:decimal, "~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "a227831daa79784eb24cdeedfa403c46a4cb7d0eab0e31232ec654314447e4e0"},
|
||||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
"earmark": {:hex, :earmark, "1.4.47", "7e7596b84fe4ebeb8751e14cbaeaf4d7a0237708f2ce43630cfd9065551f94ca", [:mix], [], "hexpm", "3e96bebea2c2d95f3b346a7ff22285bc68a99fbabdad9b655aa9c6be06c698f8"},
|
||||||
|
"earmark_parser": {:hex, :earmark_parser, "1.4.39", "424642f8335b05bb9eb611aa1564c148a8ee35c9c8a8bba6e129d51a3e3c6769", [:mix], [], "hexpm", "06553a88d1f1846da9ef066b87b57c6f605552cfbe40d20bd8d59cc6bde41944"},
|
||||||
|
"erlex": {:hex, :erlex, "0.2.6", "c7987d15e899c7a2f34f5420d2a2ea0d659682c06ac607572df55a43753aa12e", [:mix], [], "hexpm", "2ed2e25711feb44d52b17d2780eabf998452f6efda104877a3881c2f8c0c0c75"},
|
||||||
|
"ex_check": {:hex, :ex_check, "0.16.0", "07615bef493c5b8d12d5119de3914274277299c6483989e52b0f6b8358a26b5f", [:mix], [], "hexpm", "4d809b72a18d405514dda4809257d8e665ae7cf37a7aee3be6b74a34dec310f5"},
|
||||||
|
"ex_doc": {:hex, :ex_doc, "0.30.0", "ed94bf5183f559d2f825e4f866cc0eab277bbb17da76aff40f8e0f149656943e", [:mix], [{:earmark_parser, "~> 1.4.31", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "6743fe46704fe27e2f2558faa61f00e5356528768807badb2092d38476d6dac2"},
|
||||||
|
"file_system": {:hex, :file_system, "1.0.0", "b689cc7dcee665f774de94b5a832e578bd7963c8e637ef940cd44327db7de2cd", [:mix], [], "hexpm", "6752092d66aec5a10e662aefeed8ddb9531d79db0bc145bb8c40325ca1d8536d"},
|
||||||
"git_cli": {:hex, :git_cli, "0.3.0", "a5422f9b95c99483385b976f5d43f7e8233283a47cda13533d7c16131cb14df5", [:mix], [], "hexpm", "78cb952f4c86a41f4d3511f1d3ecb28edb268e3a7df278de2faa1bd4672eaf9b"},
|
"git_cli": {:hex, :git_cli, "0.3.0", "a5422f9b95c99483385b976f5d43f7e8233283a47cda13533d7c16131cb14df5", [:mix], [], "hexpm", "78cb952f4c86a41f4d3511f1d3ecb28edb268e3a7df278de2faa1bd4672eaf9b"},
|
||||||
"git_ops": {:hex, :git_ops, "2.4.5", "185a724dfde3745edd22f7571d59c47a835cf54ded67e9ccbc951920b7eec4c2", [:mix], [{:git_cli, "~> 0.2", [hex: :git_cli, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e323a5b01ad53bc8c19c3a444be3e61ed7803ecd2e95530446ae9327d0143ecc"},
|
"git_ops": {:hex, :git_ops, "2.6.1", "cc7799a68c26cf814d6d1a5121415b4f5bf813de200908f930b27a2f1fe9dad5", [:mix], [{:git_cli, "~> 0.2", [hex: :git_cli, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "ce62d07e41fe993ec22c35d5edb11cf333a21ddaead6f5d9868fcb607d42039e"},
|
||||||
"graphmath": {:hex, :graphmath, "2.5.0", "46b327a521260a287a05ba662fb666fd84e363bb005ee6428cf7504abe582b01", [:mix], [], "hexpm", "2406cc35ecb4793320433176c3dba77b000a74bf25bc79ad778b99f422a4ba7a"},
|
"graphmath": {:hex, :graphmath, "2.6.0", "55d71ac55d943d75ec8beea131cbd2024e1d302537c43cfb79677656a8d5f099", [:mix], [], "hexpm", "eb418636060c7a011eff0898e9e90fa5a9e45e661b8ddce3ac664765a17f7bfa"},
|
||||||
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
|
"jason": {:hex, :jason, "1.4.1", "af1504e35f629ddcdd6addb3513c3853991f694921b1b9368b0bd32beb9f1b63", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "fbb01ecdfd565b56261302f7e1fcc27c4fb8f32d56eab74db621fc154604a7a1"},
|
||||||
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
"makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"},
|
||||||
"makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"},
|
"makeup_elixir": {:hex, :makeup_elixir, "0.16.1", "cc9e3ca312f1cfeccc572b37a09980287e243648108384b97ff2b76e505c3555", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "e127a341ad1b209bd80f7bd1620a15693a9908ed780c3b763bccf7d200c767c6"},
|
||||||
"makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"},
|
"makeup_erlang": {:hex, :makeup_erlang, "0.1.2", "ad87296a092a46e03b7e9b0be7631ddcf64c790fa68a9ef5323b6cbb36affc72", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f3f5a1ca93ce6e092d92b6d9c049bcda58a3b617a8d888f8e7231c85630e8108"},
|
||||||
"nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"},
|
"nimble_parsec": {:hex, :nimble_parsec, "1.4.0", "51f9b613ea62cfa97b25ccc2c1b4216e81df970acd8e16e8d1bdc58fef21370d", [:mix], [], "hexpm", "9c565862810fb383e9838c1dd2d7d2c437b3d13b267414ba6af33e50d2d1cf28"},
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
{
|
{
|
||||||
"extends": ["gitlab>jimsy/renovate"]
|
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||||
|
"extends": [
|
||||||
|
"local>renovate/renovate"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue