ammitto 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +57 -0
  3. data/.github/workflows/docs.yml +69 -0
  4. data/.github/workflows/fetch-sources.yml +53 -0
  5. data/.github/workflows/links.yml +94 -0
  6. data/.github/workflows/rake.yml +15 -0
  7. data/.github/workflows/release.yml +28 -0
  8. data/.gitignore +7 -0
  9. data/.hound.yml +5 -0
  10. data/.rubocop.yml +29 -5
  11. data/.rubocop_todo.yml +318 -0
  12. data/Gemfile +6 -6
  13. data/README.adoc +562 -0
  14. data/Rakefile +37 -3
  15. data/ammitto.gemspec +33 -22
  16. data/bin/console +3 -3
  17. data/docs/Gemfile +26 -0
  18. data/docs/INDEX.adoc +185 -0
  19. data/docs/_config.yml +191 -0
  20. data/docs/getting-started/configuration.adoc +281 -0
  21. data/docs/getting-started/installation.adoc +116 -0
  22. data/docs/getting-started/quick-start.adoc +225 -0
  23. data/docs/interfaces/cli/index.adoc +449 -0
  24. data/docs/interfaces/ruby-api/index.adoc +336 -0
  25. data/docs/reference/entity-types.adoc +402 -0
  26. data/docs/sources/index.adoc +355 -0
  27. data/exe/ammitto +9 -0
  28. data/lib/ammitto/cli/data_command.rb +223 -0
  29. data/lib/ammitto/cli/export_command.rb +215 -0
  30. data/lib/ammitto/cli/fetch_command.rb +404 -0
  31. data/lib/ammitto/cli/get_command.rb +81 -0
  32. data/lib/ammitto/cli/harmonize_command.rb +626 -0
  33. data/lib/ammitto/cli/process_command.rb +133 -0
  34. data/lib/ammitto/cli/search_command.rb +194 -0
  35. data/lib/ammitto/cli/sources_command.rb +89 -0
  36. data/lib/ammitto/cli/status_command.rb +137 -0
  37. data/lib/ammitto/cli.rb +322 -0
  38. data/lib/ammitto/client/api_client.rb +94 -0
  39. data/lib/ammitto/client/cache.rb +126 -0
  40. data/lib/ammitto/client/cache_manager.rb +127 -0
  41. data/lib/ammitto/config/defaults.rb +97 -0
  42. data/lib/ammitto/config/env_provider.rb +81 -0
  43. data/lib/ammitto/config/override_resolver.rb +89 -0
  44. data/lib/ammitto/configuration.rb +131 -0
  45. data/lib/ammitto/data/repository.rb +323 -0
  46. data/lib/ammitto/errors/base_error.rb +212 -0
  47. data/lib/ammitto/exporter/json_ld_export.rb +418 -0
  48. data/lib/ammitto/exporter/simple_exporter.rb +196 -0
  49. data/lib/ammitto/extractors/au_extractor.rb +466 -0
  50. data/lib/ammitto/extractors/base_extractor.rb +182 -0
  51. data/lib/ammitto/extractors/ca_extractor.rb +253 -0
  52. data/lib/ammitto/extractors/ch_extractor.rb +288 -0
  53. data/lib/ammitto/extractors/cn_extractor.rb +281 -0
  54. data/lib/ammitto/extractors/eu_extractor.rb +453 -0
  55. data/lib/ammitto/extractors/eu_vessels_extractor.rb +76 -0
  56. data/lib/ammitto/extractors/jp_extractor.rb +84 -0
  57. data/lib/ammitto/extractors/nz_extractor.rb +73 -0
  58. data/lib/ammitto/extractors/registry.rb +113 -0
  59. data/lib/ammitto/extractors/ru_extractor.rb +278 -0
  60. data/lib/ammitto/extractors/tr_extractor.rb +110 -0
  61. data/lib/ammitto/extractors/uk_extractor.rb +403 -0
  62. data/lib/ammitto/extractors/un_extractor.rb +236 -0
  63. data/lib/ammitto/extractors/un_vessels_extractor.rb +84 -0
  64. data/lib/ammitto/extractors/us_extractor.rb +306 -0
  65. data/lib/ammitto/extractors/wb_extractor.rb +283 -0
  66. data/lib/ammitto/logger.rb +112 -0
  67. data/lib/ammitto/models/address.rb +50 -0
  68. data/lib/ammitto/models/aircraft_entity.rb +73 -0
  69. data/lib/ammitto/models/birth_info.rb +47 -0
  70. data/lib/ammitto/models/contact_info.rb +33 -0
  71. data/lib/ammitto/models/entity.rb +77 -0
  72. data/lib/ammitto/models/entity_link.rb +58 -0
  73. data/lib/ammitto/models/identification.rb +61 -0
  74. data/lib/ammitto/models/name_variant.rb +57 -0
  75. data/lib/ammitto/models/organization_entity.rb +82 -0
  76. data/lib/ammitto/models/person_entity.rb +81 -0
  77. data/lib/ammitto/models/source_reference.rb +28 -0
  78. data/lib/ammitto/models/tonnage.rb +31 -0
  79. data/lib/ammitto/models/vessel_entity.rb +83 -0
  80. data/lib/ammitto/ontology/entities/aircraft_entity.rb +145 -0
  81. data/lib/ammitto/ontology/entities/entity.rb +136 -0
  82. data/lib/ammitto/ontology/entities/organization_entity.rb +186 -0
  83. data/lib/ammitto/ontology/entities/person_entity.rb +175 -0
  84. data/lib/ammitto/ontology/entities/vessel_entity.rb +212 -0
  85. data/lib/ammitto/ontology/entities.rb +38 -0
  86. data/lib/ammitto/ontology/ontology.rb +182 -0
  87. data/lib/ammitto/ontology/sanction/authority.rb +65 -0
  88. data/lib/ammitto/ontology/sanction/sanction_entry.rb +182 -0
  89. data/lib/ammitto/ontology/sanction/sanction_reason.rb +117 -0
  90. data/lib/ammitto/ontology/sanction/sanction_regime.rb +58 -0
  91. data/lib/ammitto/ontology/sanction/status_history.rb +83 -0
  92. data/lib/ammitto/ontology/sanction.rb +20 -0
  93. data/lib/ammitto/ontology/types.rb +210 -0
  94. data/lib/ammitto/ontology/value_objects/address.rb +116 -0
  95. data/lib/ammitto/ontology/value_objects/birth_info.rb +121 -0
  96. data/lib/ammitto/ontology/value_objects/contact_info.rb +78 -0
  97. data/lib/ammitto/ontology/value_objects/entity_link.rb +117 -0
  98. data/lib/ammitto/ontology/value_objects/identification.rb +88 -0
  99. data/lib/ammitto/ontology/value_objects/legal_instrument.rb +116 -0
  100. data/lib/ammitto/ontology/value_objects/name_variant.rb +146 -0
  101. data/lib/ammitto/ontology/value_objects/sanction_effect.rb +98 -0
  102. data/lib/ammitto/ontology/value_objects/source_reference.rb +74 -0
  103. data/lib/ammitto/ontology/value_objects/temporal_period.rb +98 -0
  104. data/lib/ammitto/ontology/value_objects/tonnage.rb +71 -0
  105. data/lib/ammitto/ontology/value_objects.rb +28 -0
  106. data/lib/ammitto/ontology.rb +163 -0
  107. data/lib/ammitto/options/registry.rb +248 -0
  108. data/lib/ammitto/parsers/cn_announcement_parser.rb +194 -0
  109. data/lib/ammitto/parsers/cn_anti_sanctions_scraper.rb +273 -0
  110. data/lib/ammitto/parsers/ru_list_parser.rb +155 -0
  111. data/lib/ammitto/sanction/authority.rb +61 -0
  112. data/lib/ammitto/sanction/legal_instrument.rb +54 -0
  113. data/lib/ammitto/sanction/list_type.rb +44 -0
  114. data/lib/ammitto/sanction/official_announcement.rb +40 -0
  115. data/lib/ammitto/sanction/raw_source_data.rb +47 -0
  116. data/lib/ammitto/sanction/sanction_effect.rb +51 -0
  117. data/lib/ammitto/sanction/sanction_entry.rb +127 -0
  118. data/lib/ammitto/sanction/sanction_reason.rb +48 -0
  119. data/lib/ammitto/sanction/sanction_regime.rb +32 -0
  120. data/lib/ammitto/sanction/status_change.rb +87 -0
  121. data/lib/ammitto/sanction/temporal_period.rb +55 -0
  122. data/lib/ammitto/schema/context.rb +217 -0
  123. data/lib/ammitto/schema/validator.rb +138 -0
  124. data/lib/ammitto/scrapers/base_page.rb +183 -0
  125. data/lib/ammitto/scrapers/cn/cn_sanctions_scraper.rb +152 -0
  126. data/lib/ammitto/scrapers/cn/mfa_page.rb +293 -0
  127. data/lib/ammitto/scrapers/cn/mofcom_page.rb +346 -0
  128. data/lib/ammitto/scrapers/ru/mid_page.rb +339 -0
  129. data/lib/ammitto/scrapers/ru/ru_sanctions_scraper.rb +110 -0
  130. data/lib/ammitto/search/query_builder.rb +77 -0
  131. data/lib/ammitto/search/result_set.rb +182 -0
  132. data/lib/ammitto/serialization/json_ld_graph_exporter.rb +688 -0
  133. data/lib/ammitto/serialization/json_ld_serializer.rb +439 -0
  134. data/lib/ammitto/serialization/ontology_exporter.rb +385 -0
  135. data/lib/ammitto/serialization/rdf_serializer.rb +241 -0
  136. data/lib/ammitto/serialization/search_index_exporter.rb +448 -0
  137. data/lib/ammitto/serialization/turtle_exporter.rb +262 -0
  138. data/lib/ammitto/sources/au/sanctions_list.rb +762 -0
  139. data/lib/ammitto/sources/au/transformer.rb +319 -0
  140. data/lib/ammitto/sources/au.rb +51 -0
  141. data/lib/ammitto/sources/au_source.rb +38 -0
  142. data/lib/ammitto/sources/base_source.rb +148 -0
  143. data/lib/ammitto/sources/ca/sanctions_list.rb +127 -0
  144. data/lib/ammitto/sources/ca/transformer.rb +140 -0
  145. data/lib/ammitto/sources/ca.rb +51 -0
  146. data/lib/ammitto/sources/ca_source.rb +38 -0
  147. data/lib/ammitto/sources/ch/sanctions_list.rb +270 -0
  148. data/lib/ammitto/sources/ch/transformer.rb +123 -0
  149. data/lib/ammitto/sources/ch.rb +51 -0
  150. data/lib/ammitto/sources/ch_source.rb +38 -0
  151. data/lib/ammitto/sources/cn/sanctions_list.rb +155 -0
  152. data/lib/ammitto/sources/cn/transformer.rb +216 -0
  153. data/lib/ammitto/sources/cn.rb +60 -0
  154. data/lib/ammitto/sources/cn_source.rb +55 -0
  155. data/lib/ammitto/sources/eu/address.rb +56 -0
  156. data/lib/ammitto/sources/eu/birthdate.rb +75 -0
  157. data/lib/ammitto/sources/eu/citizenship.rb +46 -0
  158. data/lib/ammitto/sources/eu/export.rb +36 -0
  159. data/lib/ammitto/sources/eu/identification.rb +46 -0
  160. data/lib/ammitto/sources/eu/name_alias.rb +66 -0
  161. data/lib/ammitto/sources/eu/processed_entity.rb +193 -0
  162. data/lib/ammitto/sources/eu/regulation.rb +53 -0
  163. data/lib/ammitto/sources/eu/regulation_summary.rb +39 -0
  164. data/lib/ammitto/sources/eu/sanction_entity.rb +109 -0
  165. data/lib/ammitto/sources/eu/subject_type.rb +31 -0
  166. data/lib/ammitto/sources/eu/transformer.rb +345 -0
  167. data/lib/ammitto/sources/eu.rb +25 -0
  168. data/lib/ammitto/sources/eu_source.rb +48 -0
  169. data/lib/ammitto/sources/eu_vessels/sanctions_list.rb +68 -0
  170. data/lib/ammitto/sources/eu_vessels/transformer.rb +118 -0
  171. data/lib/ammitto/sources/eu_vessels/vessel.rb +59 -0
  172. data/lib/ammitto/sources/eu_vessels.rb +52 -0
  173. data/lib/ammitto/sources/jp/entity.rb +71 -0
  174. data/lib/ammitto/sources/jp/sanctions_list.rb +60 -0
  175. data/lib/ammitto/sources/jp/transformer.rb +162 -0
  176. data/lib/ammitto/sources/jp.rb +49 -0
  177. data/lib/ammitto/sources/nz/entity.rb +113 -0
  178. data/lib/ammitto/sources/nz/individual.rb +155 -0
  179. data/lib/ammitto/sources/nz/sanctions_list.rb +112 -0
  180. data/lib/ammitto/sources/nz/ship.rb +116 -0
  181. data/lib/ammitto/sources/nz/transformer.rb +192 -0
  182. data/lib/ammitto/sources/nz.rb +56 -0
  183. data/lib/ammitto/sources/registry.rb +71 -0
  184. data/lib/ammitto/sources/ru/sanctions_list.rb +143 -0
  185. data/lib/ammitto/sources/ru/transformer.rb +219 -0
  186. data/lib/ammitto/sources/ru.rb +60 -0
  187. data/lib/ammitto/sources/ru_source.rb +48 -0
  188. data/lib/ammitto/sources/tr/sanctions_list.rb +196 -0
  189. data/lib/ammitto/sources/tr/transformer.rb +151 -0
  190. data/lib/ammitto/sources/tr.rb +64 -0
  191. data/lib/ammitto/sources/uk/address.rb +83 -0
  192. data/lib/ammitto/sources/uk/date_normalizer.rb +73 -0
  193. data/lib/ammitto/sources/uk/designation.rb +214 -0
  194. data/lib/ammitto/sources/uk/designations.rb +50 -0
  195. data/lib/ammitto/sources/uk/individual_details.rb +125 -0
  196. data/lib/ammitto/sources/uk/name.rb +71 -0
  197. data/lib/ammitto/sources/uk/non_latin_name.rb +28 -0
  198. data/lib/ammitto/sources/uk/sanctions_indicators.rb +175 -0
  199. data/lib/ammitto/sources/uk/transformer.rb +331 -0
  200. data/lib/ammitto/sources/uk.rb +57 -0
  201. data/lib/ammitto/sources/uk_source.rb +44 -0
  202. data/lib/ammitto/sources/un/consolidated_list.rb +48 -0
  203. data/lib/ammitto/sources/un/designation.rb +25 -0
  204. data/lib/ammitto/sources/un/entities_wrapper.rb +23 -0
  205. data/lib/ammitto/sources/un/entity.rb +75 -0
  206. data/lib/ammitto/sources/un/entity_address.rb +35 -0
  207. data/lib/ammitto/sources/un/entity_alias.rb +26 -0
  208. data/lib/ammitto/sources/un/individual.rb +122 -0
  209. data/lib/ammitto/sources/un/individual_address.rb +35 -0
  210. data/lib/ammitto/sources/un/individual_alias.rb +26 -0
  211. data/lib/ammitto/sources/un/individual_date_of_birth.rb +29 -0
  212. data/lib/ammitto/sources/un/individual_document.rb +32 -0
  213. data/lib/ammitto/sources/un/individual_place_of_birth.rb +29 -0
  214. data/lib/ammitto/sources/un/individuals_wrapper.rb +23 -0
  215. data/lib/ammitto/sources/un/nationality.rb +23 -0
  216. data/lib/ammitto/sources/un/transformer.rb +421 -0
  217. data/lib/ammitto/sources/un/value_wrapper.rb +25 -0
  218. data/lib/ammitto/sources/un.rb +30 -0
  219. data/lib/ammitto/sources/un_source.rb +52 -0
  220. data/lib/ammitto/sources/un_vessels/sanctions_list.rb +60 -0
  221. data/lib/ammitto/sources/un_vessels/transformer.rb +139 -0
  222. data/lib/ammitto/sources/un_vessels/vessel.rb +119 -0
  223. data/lib/ammitto/sources/un_vessels.rb +52 -0
  224. data/lib/ammitto/sources/us/address.rb +44 -0
  225. data/lib/ammitto/sources/us/address_list.rb +23 -0
  226. data/lib/ammitto/sources/us/aka.rb +39 -0
  227. data/lib/ammitto/sources/us/aka_list.rb +23 -0
  228. data/lib/ammitto/sources/us/date_of_birth_item.rb +29 -0
  229. data/lib/ammitto/sources/us/date_of_birth_list.rb +23 -0
  230. data/lib/ammitto/sources/us/id.rb +38 -0
  231. data/lib/ammitto/sources/us/id_list.rb +23 -0
  232. data/lib/ammitto/sources/us/place_of_birth_item.rb +29 -0
  233. data/lib/ammitto/sources/us/place_of_birth_list.rb +23 -0
  234. data/lib/ammitto/sources/us/program_list.rb +23 -0
  235. data/lib/ammitto/sources/us/publish_information.rb +26 -0
  236. data/lib/ammitto/sources/us/sdn_entry.rb +117 -0
  237. data/lib/ammitto/sources/us/sdn_list.rb +59 -0
  238. data/lib/ammitto/sources/us/transformer.rb +405 -0
  239. data/lib/ammitto/sources/us.rb +29 -0
  240. data/lib/ammitto/sources/us_source.rb +51 -0
  241. data/lib/ammitto/sources/wb/response.rb +59 -0
  242. data/lib/ammitto/sources/wb/sanctioned_firm.rb +121 -0
  243. data/lib/ammitto/sources/wb/transformer.rb +216 -0
  244. data/lib/ammitto/sources/wb.rb +16 -0
  245. data/lib/ammitto/sources/wb_source.rb +39 -0
  246. data/lib/ammitto/transformers/base_transformer.rb +226 -0
  247. data/lib/ammitto/transformers/registry.rb +85 -0
  248. data/lib/ammitto/version.rb +1 -1
  249. data/lib/ammitto.rb +161 -35
  250. data/scripts/parse_jp_end_user_list.rb +65 -0
  251. data/scripts/parse_un_vessels_list.rb +88 -0
  252. metadata +391 -38
  253. data/.github/workflows/macos.yml +0 -34
  254. data/.github/workflows/ubuntu.yml +0 -32
  255. data/.github/workflows/windows.yml +0 -35
  256. data/.idea/.gitignore +0 -8
  257. data/.idea/ammitto.iml +0 -16
  258. data/.idea/inspectionProfiles/Project_Default.xml +0 -6
  259. data/.idea/inspectionProfiles/profiles_settings.xml +0 -5
  260. data/.idea/misc.xml +0 -4
  261. data/.idea/modules.xml +0 -8
  262. data/.idea/vcs.xml +0 -6
  263. data/README.md +0 -43
  264. data/lib/ammitto/address.rb +0 -17
  265. data/lib/ammitto/document.rb +0 -16
  266. data/lib/ammitto/hash.rb +0 -15
  267. data/lib/ammitto/sanction_item.rb +0 -26
  268. data/lib/ammitto/sanction_item_collection.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bdbfea4f804660eb1c16521d395187d4906dc289a67c8656eea4136152862e89
4
- data.tar.gz: 7b46c8eea23105eb38ed6d457296cdec1b779d55fcdd8ed2c32c98b4cffaed7a
3
+ metadata.gz: b8083a37ce1c0b7fbb4bab41d0468428540dde0203361784fcce14ee17144244
4
+ data.tar.gz: f1927fb6fbf2974937cfbe0054fd467f1e6328e0856009f24f3185e398579aa3
5
5
  SHA512:
6
- metadata.gz: 8c783eb70c0cc5a585ab19810c1974f9996e5f37458db05cb51a2876a135d840d4bb5ac657f40e6fa60eac6bd629950d87d6f09f428cbf3940bd06b3aa80442c
7
- data.tar.gz: 7cc9c4aff179c1cb6fa5595ab2d7ec3bb6752f4deada7fc3bcd761ba9e992cd5854af855923145429bc769f9f6240aca8bbceb0dbc8758cf2ac967c341270cc2
6
+ metadata.gz: 541bfdd4743b69e63c90fa12cd4829eb907cc5209739bac6abc46ead3dee9ffcd2d65340efa43ee73f5e9e3351d73dd27be3e56ca956929f1fd7a1ef1ba454f4
7
+ data.tar.gz: 35c9eda6cedc4d5564916e7a556f84b52057836455dc81ca232841a95061b38d287741af8dda9e78fd701c946ef2e02a9ab3dc5f2941f68939b861ccf5a2a1d0
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ name: CI
4
+
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ pull_request:
9
+ branches: ['**']
10
+
11
+ jobs:
12
+ test:
13
+ name: Test on Ruby ${{ matrix.ruby }}
14
+ runs-on: ubuntu-latest
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ ruby: ['3.0', '3.1', '3.2', '3.3']
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+
22
+ - name: Set up Ruby
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby }}
26
+ bundler-cache: true
27
+
28
+ - name: Install dependencies
29
+ run: bundle install
30
+
31
+ - name: Run specs
32
+ run: bundle exec rake
33
+
34
+ - name: Run Rubocop
35
+ run: bundle exec rubocop
36
+
37
+ - name: Upload coverage
38
+ if: matrix.ruby == '3.2'
39
+ uses: actions/upload-artifact@v4
40
+ with:
41
+ name: coverage-${{ matrix.ruby }}
42
+ path: coverage/
43
+
44
+ lint:
45
+ name: Lint
46
+ runs-on: ubuntu-latest
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+
50
+ - name: Set up Ruby
51
+ uses: ruby/setup-ruby@v1
52
+ with:
53
+ ruby-version: '3.2'
54
+ bundler-cache: true
55
+
56
+ - name: Run Rubocop
57
+ run: bundle exec rubocop --parallel
@@ -0,0 +1,69 @@
1
+ name: Documentation
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - 'docs/**'
9
+ - '.github/workflows/docs.yml'
10
+ pull_request:
11
+ paths:
12
+ - 'docs/**'
13
+ workflow_dispatch:
14
+
15
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
16
+ permissions:
17
+ contents: read
18
+ pages: write
19
+ id-token: write
20
+
21
+ # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
22
+ # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
23
+ concurrency:
24
+ group: ${{ github.workflow }}-${{ github.ref }}
25
+ cancel-in-progress: false
26
+
27
+ jobs:
28
+ build:
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - name: Checkout
32
+ uses: actions/checkout@v4
33
+
34
+ - name: Setup Ruby
35
+ uses: ruby/setup-ruby@v1
36
+ with:
37
+ ruby-version: '3.4'
38
+ bundler-cache: true
39
+ cache-version: 0
40
+ working-directory: docs
41
+
42
+ - name: Setup Pages
43
+ id: pages
44
+ uses: actions/configure-pages@v5
45
+
46
+ - name: Build with Jekyll
47
+ run: bundle exec jekyll build --verbose --trace --baseurl "${{ steps.pages.outputs.base_path }}"
48
+ working-directory: docs
49
+ env:
50
+ JEKYLL_ENV: production
51
+ JEKYLL_LOG_LEVEL: debug
52
+
53
+ - name: Upload artifact
54
+ uses: actions/upload-pages-artifact@v4
55
+ with:
56
+ path: docs/_site
57
+
58
+ # Deployment job
59
+ deploy:
60
+ environment:
61
+ name: github-pages
62
+ url: ${{ steps.deployment.outputs.page_url }}
63
+ if: ${{ github.ref == 'refs/heads/main' }}
64
+ runs-on: ubuntu-latest
65
+ needs: build
66
+ steps:
67
+ - name: Deploy to GitHub Pages
68
+ id: deployment
69
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,53 @@
1
+ name: fetch-sources
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 6 * * *' # Daily at 6am UTC
6
+ workflow_dispatch:
7
+ inputs:
8
+ sources:
9
+ description: 'Comma-separated list of sources to fetch'
10
+ required: false
11
+ default: 'all'
12
+
13
+ jobs:
14
+ fetch:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - uses: ruby/setup-ruby@v1
20
+ with:
21
+ bundler-cache: true
22
+
23
+ - name: Install dependencies
24
+ run: bundle install --jobs 4 --retry 3
25
+
26
+ - name: Fetch latest data
27
+ run: |
28
+ bundle exec ammitto fetch ${{ github.event.inputs.sources != 'all' && github.event.inputs.sources || '' }} --verbose
29
+ continue-on-error: true
30
+
31
+ - name: Process data
32
+ run: bundle exec ammitto process --verbose
33
+ continue-on-error: true
34
+
35
+ - name: Export JSON-LD
36
+ run: bundle exec ammitto export jsonld --output-dir ./data/api/v1 --verbose
37
+
38
+ - name: Generate all formats
39
+ run: |
40
+ bundle exec ammitto export ttl --output-dir ./data/api/v1
41
+ bundle exec ammitto export nt --output-dir ./data/api/v1
42
+ continue-on-error: true
43
+
44
+ - name: Commit changes
45
+ run: |
46
+ git config user.name "github-actions[bot]"
47
+ git config user.email "github-actions[bot]@users.noreply.github.com"
48
+ git add data/api/v1
49
+ git diff --quiet && git diff --staged --quiet || git commit -m "chore(data): update sanctions data $(date '+%Y-%m-%d')"
50
+
51
+ - name: Push changes
52
+ run: git push
53
+ if: success()
@@ -0,0 +1,94 @@
1
+ name: Link Checker
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ paths:
8
+ - 'docs/**'
9
+ pull_request:
10
+ paths:
11
+ - 'docs/**'
12
+ schedule:
13
+ # Run weekly on Sunday at 00:00 UTC
14
+ - cron: '0 0 * * 0'
15
+ workflow_dispatch:
16
+
17
+ jobs:
18
+ link_checker:
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+
23
+ - name: Setup Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: '3.4'
27
+ bundler-cache: true
28
+ working-directory: docs
29
+
30
+ - name: Build site
31
+ env:
32
+ JEKYLL_ENV: production
33
+ run: bundle exec jekyll build --trace
34
+ working-directory: docs
35
+
36
+ - name: Restore lychee cache
37
+ uses: actions/cache@v4
38
+ with:
39
+ path: .lycheecache
40
+ key: cache-lychee-${{ github.sha }}
41
+ restore-keys: cache-lychee-
42
+
43
+ - name: Check if site was built
44
+ run: |
45
+ if [ ! -d "_site" ]; then
46
+ echo "Error: _site directory not created"
47
+ exit 1
48
+ fi
49
+ echo "Site built successfully"
50
+ ls -la _site/
51
+ working-directory: docs
52
+
53
+ - name: Link Checker
54
+ uses: lycheeverse/lychee-action@v2
55
+ with:
56
+ args: >-
57
+ --verbose
58
+ --no-progress
59
+ --config docs/lychee.toml
60
+ --root-dir "$(pwd)/docs/_site"
61
+ --base-url file://${{ github.workspace }}/docs/_site
62
+ 'docs/_site/**/*.html'
63
+ fail: true
64
+ output: link-check-results.md
65
+ format: markdown
66
+ workingDirectory: .
67
+
68
+ - name: Upload link check results
69
+ if: always()
70
+ uses: actions/upload-artifact@v4
71
+ with:
72
+ name: link-check-results
73
+ path: link-check-results.md
74
+ retention-days: 30
75
+
76
+ - name: Comment PR with results
77
+ if: failure() && github.event_name == 'pull_request'
78
+ uses: actions/github-script@v7
79
+ with:
80
+ script: |
81
+ const fs = require('fs');
82
+ let comment = '## 🔗 Link Check Failed\n\n';
83
+
84
+ if (fs.existsSync('link-check-results.md')) {
85
+ const results = fs.readFileSync('link-check-results.md', 'utf8');
86
+ comment += '### Results\n\n' + results + '\n\n';
87
+ }
88
+
89
+ github.rest.issues.createComment({
90
+ issue_number: context.issue.number,
91
+ owner: context.repo.owner,
92
+ repo: context.repo.repo,
93
+ body: comment
94
+ });
@@ -0,0 +1,15 @@
1
+ name: rake
2
+
3
+ permissions:
4
+ contents: write
5
+
6
+ on:
7
+ push:
8
+ branches: [ main ]
9
+ tags: [ v* ]
10
+ pull_request:
11
+ workflow_dispatch:
12
+
13
+ jobs:
14
+ rake:
15
+ uses: metanorma/ci/.github/workflows/generic-rake.yml@main
@@ -0,0 +1,28 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ name: release
4
+
5
+ permissions:
6
+ contents: write
7
+ packages: write
8
+ id-token: write
9
+
10
+ on:
11
+ workflow_dispatch:
12
+ inputs:
13
+ next_version:
14
+ description: |
15
+ Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
16
+ required: true
17
+ default: "skip"
18
+ repository_dispatch:
19
+ types: [do-release]
20
+
21
+ jobs:
22
+ release:
23
+ uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
24
+ with:
25
+ next_version: ${{ github.event.inputs.next_version }}
26
+ secrets:
27
+ rubygems-api-key: ${{ secrets.AMMITTO_CI_RUBYGEMS_API_KEY }}
28
+ pat_token: ${{ secrets.GITHUB_TOKEN }}
data/.gitignore CHANGED
@@ -6,7 +6,14 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ .idea
10
+
11
+ # Test output
12
+ /test-output/
9
13
 
10
14
  # rspec failure tracking
11
15
  .rspec_status
12
16
  Gemfile.lock
17
+ CLAUDE.md
18
+ _site
19
+
data/.hound.yml ADDED
@@ -0,0 +1,5 @@
1
+ # Auto-generated by Cimas: Do not edit it manually!
2
+ # See https://github.com/metanorma/cimas
3
+ ruby:
4
+ enabled: true
5
+ config_file: .rubocop.yml
data/.rubocop.yml CHANGED
@@ -1,10 +1,34 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
1
3
  # This project follows the Ribose OSS style guide.
2
4
  # https://github.com/riboseinc/oss-guides
3
5
  # All project-specific additions and overrides should be specified in this file.
4
6
 
5
- inherit_from:
6
- - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
7
7
  AllCops:
8
- TargetRubyVersion: 2.4
9
- Rails:
10
- Enabled: false
8
+ TargetRubyVersion: 3.0
9
+ Rails:
10
+ Enabled: false
11
+ Layout:
12
+ IndentationWidth: 2
13
+ LineLength: 80
14
+ NewCops: enable
15
+ SuggestExtensions: false
16
+
17
+ Style/FrozenStringLiteralComment:
18
+ Enabled: false
19
+
20
+ Metrics/MethodLength:
21
+ Max: 50
22
+
23
+ Metrics/ClassLength:
24
+ Max: 300
25
+
26
+ Metrics/BlockLength:
27
+ Max: 50
28
+ Exclude:
29
+ - 'spec/**/*.rb'
30
+ - 'docs/**/*.rb'
31
+
32
+ Lint/ConstantDefinitionInBlock:
33
+ Exclude:
34
+ - 'spec/**/*.rb'