Compare commits

...

34 commits
v1.0.0 ... main

Author SHA1 Message Date
b647a84b8c chore(deps): update dependency elixir to v1.17.3
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-19 01:06:02 +12:00
531924f617 chore(deps): update dependency erlang to v27.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-09-18 20:07:31 +12:00
be7feff128 chore(deps): update dependency graphmath to v2.6.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-08-03 20:15:42 +12:00
375f9c82df chore(deps): update dependency earmark to v1.4.47
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-07-13 06:29:59 +12:00
31cf0c6bdc chore(deps): update dependency erlang to v27.0.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-07-11 01:31:43 +12:00
05325c4ec7 chore(deps): update dependency elixir to v1.17.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-07-07 09:30:20 +12:00
fbd0de8f08 chore(deps): update dependency elixir to v1.17.1
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is passing
2024-06-19 01:13:27 +12:00
35182a58fd chore(deps): update dependency elixir to v1.17.0
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-06-15 13:34:12 +12:00
ff82195455 chore(deps): update dependency credo to v1.7.7
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-06-15 12:43:11 +12:00
684a425442 chore(deps): update dependency elixir to v1.16.3
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-05-21 11:14:16 +12:00
98866615e3
chore: fix tests for Erlang 27.
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-05-21 09:02:18 +12:00
de9e537018 chore(deps): update dependency erlang to v27
Some checks failed
continuous-integration/drone/pr Build is failing
continuous-integration/drone/push Build is failing
2024-05-20 21:35:29 +12:00
7434e85666 chore(deps): update dependency git_ops to v2.6.1
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-05-11 10:32:59 +12:00
c83b2d33ff chore(deps): update dependency credo to v1.7.6
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-05-09 23:52:15 +12:00
877e7a28fe chore(deps): update dependency erlang to v26.2.5
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-05-03 03:30:49 +12:00
517d1634f2 chore(deps): update dependency erlang to v26.2.4
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-04-13 00:29:28 +12:00
138a2232c3
chore: fix docs release.
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-14 19:23:39 +13:00
115f868341 chore(deps): update dependency credo to v1.7.5
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-03-14 15:16:31 +13:00
7d0dbfe9d4 chore(deps): update dependency angle to v1
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-14 14:47:59 +13:00
5b690b0494 chore(deps): update dependency git_ops to v2.6.0
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-14 14:47:41 +13:00
f96140b926 chore(deps): update dependency earmark to v1.4.46
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-03-14 00:42:49 +00:00
fe42028a62 chore(deps): update dependency elixir to v1.16.2
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-03-11 00:30:55 +13:00
037992635c
chore: fix typo in readme
All checks were successful
continuous-integration/drone/push Build is passing
2024-03-08 14:45:46 +13:00
6c94cb95a5 chore(deps): update dependency erlang to v26.2.3
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-03-07 22:23:53 +13:00
905e45db4f chore(deps): update dependency ex_check to ~> 0.16
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2024-03-01 23:20:47 +13:00
5b1ef639d7
chore: release version v1.0.1
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-23 20:12:08 +13:00
9b44964aeb
chore: add ex_check. 2024-02-23 20:11:51 +13:00
d0407b40d2
docs: Update README and package links. 2024-02-23 20:11:29 +13:00
6e0d6eddd2 chore: Configure Renovate (#31)
All checks were successful
continuous-integration/drone/push Build is passing
Welcome to [Renovate](https://github.com/renovatebot/renovate)! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.

---
### Detected Package Files

 * `.tool-versions` (asdf)
 * `.drone.yml` (droneci)
 * `mix.exs` (mix)

### Configuration Summary

Based on the default config's presets, Renovate will:

  - Start dependency updates only once this onboarding PR is merged
  - Enable Renovate Dependency Dashboard creation.
  - Use semantic commit type `fix` for dependencies and `chore` for all others if semantic commits are in use.
  - Ignore `node_modules`, `bower_components`, `vendor` and various test/tests directories.
  - Group known monorepo packages together.
  - Use curated list of recommended non-monorepo package groupings.
  - Apply crowd-sourced package replacement rules.
  - Apply crowd-sourced workarounds for known problems with packages.
  - Use semantic prefixes for commit messages and PR titles.
  - Use `chore` as semantic commit type for commit messages and PR titles.
  - Removes rate limit for PR creation per hour.
  - Remove limit for open PRs at any time.
  - Automerge all upgrades (including `major`) if they pass tests.
  - Assign PRs to `james`.
  - Rebase existing PRs any time the base branch has been updated.
  - Raise PR when vulnerability alerts are detected.
  - Disable Renovate Dependency Dashboard creation.

🔡 Do you want to change how Renovate upgrades your dependencies? Add your custom config to `renovate.json` in this branch. Renovate will update the Pull Request description the next time it runs.

---

### What to Expect

With your current configuration, Renovate will create 1 Pull Request:

<details>
<summary>chore(deps): update dependency ex_doc to ~> 0.31</summary>

  - Schedule: ["at any time"]
  - Branch name: `renovate/ex_doc-0.x`
  - Merge into: `main`
  - Upgrade ex_doc to `~> 0.31`

</details>

---

 Got questions? Check out Renovate's [Docs](https://docs.renovatebot.com/), particularly the Getting Started section.
If you need any further assistance then you can also [request help here](https://github.com/renovatebot/renovate/discussions).

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).

<!--renovate-config-hash:758a0db051676a629cb8daada3244b6287c728a47d095002c4ae62062eae6bf3-->

Reviewed-on: #31
Co-authored-by: Renovate Bot <bot@harton.nz>
Co-committed-by: Renovate Bot <bot@harton.nz>
2024-02-14 17:42:55 +13:00
075d1f1c95 chore: remove old renovate configuration
All checks were successful
continuous-integration/drone/push Build is passing
2024-02-14 15:01:58 +13:00
612d831f4e chore: migrate to local (#20) (#30)
All checks were successful
continuous-integration/drone/push Build is passing
* Add Drone CI configuration
* Change URLs
* Remove Gitlab CI configuration

Reviewed-on: #30
Co-authored-by: James Harton <james@harton.nz>
Co-committed-by: James Harton <james@harton.nz>
2024-02-14 13:49:08 +13:00
0b859c709b Merge branch 'renovate/ex_doc-0.x' into 'main'
chore(deps): update dependency ex_doc to ~> 0.30

See merge request jimsy/kinemat!22
2023-07-09 02:02:11 +00:00
17f1eb9015
chore: fix typos, and explicitly order inspect attributes. 2023-07-09 13:59:11 +12:00
6d60fff728 chore(deps): update dependency ex_doc to ~> 0.30 2023-07-07 23:21:13 +12:00
23 changed files with 479 additions and 185 deletions

382
.drone.yml Normal file
View 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

View file

@ -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
View file

@ -0,0 +1,2 @@
erlang 27.1
elixir 1.17.3

View file

@ -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.

View file

@ -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.

View file

@ -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"

View file

@ -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), ">"])

View file

@ -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), ">"])

View file

@ -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), ">"])

View file

@ -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 """

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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))

View file

@ -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

View file

@ -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
View file

@ -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"}
] ]

View file

@ -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"},
} }

View file

@ -1,3 +1,6 @@
{ {
"extends": ["gitlab>jimsy/renovate"] "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"local>renovate/renovate"
]
} }