frostfs-locode-db/Makefile
George Bartolomey 3feec01b21
[#6] Add automated database updater
A small parser of unece.org "Trade code download page" added to Makefile to fetch last
database's URL to download. Also, the forgejo action added. Action runs every
month to update databases and send PR to Forgejo.

Signed-off-by: George Bartolomey <george@bh4.ru>
2024-07-04 14:33:03 +03:00

120 lines
3.6 KiB
Makefile

#!/usr/bin/make -f
VERSION ?= "$(shell git describe --tags --match "v*" --dirty --always --abbrev=8 2>/dev/null || cat VERSION 2>/dev/null || echo "develop")"
FROST ?= frostfs-cli
.PHONY: all clean version help update debpackage
DIRS = in tmp
# IGNORE
space := $(subst ,, )
# .deb package versioning
OS_RELEASE = $(shell lsb_release -cs)
PKG_VERSION ?= $(shell echo $(VERSION) | sed "s/^v//" | \
sed -E "s/(.*)-(g[a-fA-F0-9]{6,8})(.*)/\1\3~\2/" | \
sed "s/-/~/")-${OS_RELEASE}
# Generate locode_db BoltDB file
all: $(DIRS) locode_db
$(DIRS):
@echo "⇒ Ensure dir: $@"
@mkdir -p $@
in/airports.dat: $(DIRS)
zcat data/airports.dat.gz > in/airports.dat
in/countries.dat: $(DIRS)
zcat data/countries.dat.gz > in/countries.dat
in/continents.geojson: $(DIRS)
zcat data/continents.geojson.gz > in/continents.geojson
in/unlocode-SubdivisionCodes.csv: $(DIRS)
zcat data/unlocode-SubdivisionCodes.csv.gz > in/unlocode-SubdivisionCodes.csv
in/unlocode-CodeList.csv: $(DIRS)
zcat data/unlocode-CodeList.csv.gz > in/unlocode-CodeList.csv
# Generate locode_db BoltDB file
locode_db: in/unlocode-CodeList.csv in/unlocode-SubdivisionCodes.csv in/continents.geojson in/airports.dat in/countries.dat
$(FROST) util locode generate \
--airports in/airports.dat \
--continents in/continents.geojson \
--countries in/countries.dat \
--in in/unlocode-CodeList.csv \
--subdiv in/unlocode-SubdivisionCodes.csv \
--out locode_db
chmod 644 locode_db
# IGNORE
# Openflights doesn't have tags or releases, so update would always take latest master version.
# See https://github.com/jpatokal/openflights
data/airports.dat.gz: $(DIRS)
wget -c https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat -O tmp/airports.dat && \
gzip -c tmp/airports.dat > data/airports.dat.gz
data/countries.dat.gz: $(DIRS)
wget -c https://raw.githubusercontent.com/jpatokal/openflights/master/data/countries.dat -O tmp/countries.dat && \
gzip -c tmp/countries.dat > data/countries.dat.gz
# IGNORE
# See https://unece.org/trade/cefact/UNLOCODE-Download
tmp/locode.csv.zip :$(DIRS)
DOWNLOADURL=$$(wget -O - https://unece.org/trade/cefact/UNLOCODE-Download \
| grep -oP '(?<=href=")\S+loc\d+csv\.zip'); \
echo "$$DOWNLOADURL" | grep -oP '(?<=loc)\d+' > tmp/locode-version.txt; \
wget -c "$$DOWNLOADURL" -O tmp/locode.csv.zip
data/unlocode-SubdivisionCodes.csv.gz: tmp/locode.csv.zip
unzip -p tmp/locode.csv.zip "*SubdivisionCodes.csv" | gzip > data/unlocode-SubdivisionCodes.csv.gz
data/unlocode-CodeList.csv.gz: tmp/locode.csv.zip
unzip -p tmp/locode.csv.zip "*CodeListPart*" | gzip > data/unlocode-CodeList.csv.gz
# Download and repack external data-sources
update: data/unlocode-CodeList.csv.gz data/unlocode-SubdivisionCodes.csv.gz data/countries.dat.gz data/airports.dat.gz
# Print version
version:
@echo $(VERSION)
# Show this help prompt
help:
@echo ' Usage:'
@echo ''
@echo ' make <target>'
@echo ''
@echo ' Targets:'
@echo ''
@awk '/^#/{ comment = substr($$0,3) } comment && /^[a-zA-Z][a-zA-Z0-9_-]+ ?:/{ print " ", $$1, comment }' $(MAKEFILE_LIST) | column -t -s ':' | grep -v 'IGNORE' | sort -u
# Clean data directory before update
clean_data:
rm -f data/unlocode-CodeList.csv.gz
rm -f data/unlocode-SubdivisionCodes.csv.gz
rm -f data/countries.dat.gz
rm -f data/airports.dat.gz
# Clean up
clean:
rm -f in/*
rm -f tmp/*
rm -f locode_db
# Package for Debian
debpackage:
dch --package frostfs-locode-db \
--controlmaint \
--newversion $(PKG_VERSION) \
--force-bad-version \
--distribution $(OS_RELEASE) \
"Please see CHANGELOG.md for code changes for $(VERSION)"
dpkg-buildpackage --no-sign -b
# Clean up debian packaging leftovers
debclean:
dh clean