# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

# What is the prerelease version?
vsn_pre = $(shell git describe --tags --always --first-parent \
        | grep -Eo -- '(-rc\.[0-9]+)?$$' \
        2>/dev/null)

# What is the release version?
vsn_rel = $(shell git describe --tags --always --first-parent \
        | grep -Eo -- '^v[0-9]+\.[0-9]\.[0-9]+' \
        | tail -c +2 \
        2>/dev/null)

# Is this a tagged release?
vsn_tag = $(shell git describe --tags --always --first-parent \
        | grep -Eo -- '^v[0-9]+\.[0-9]\.[0-9]+(-rc.[0-9]+)?$$' \
        | tail -c +2 \
        2>/dev/null)

annotator_vsn = $(vsn_rel)

.PHONY: all
all: build

.PHONY: build
build:
	@yarn

.PHONY: clean
clean:
	@yarn run clean

.PHONY: check
check: lint test

.PHONY: lint
lint: build
	@yarn lint

.PHONY: test
test: build
	@yarn test

ifeq ($(vsn_tag),)

.PHONY: dist
dist:
	$(error No tag found for release)

else

.PHONY: dist
dist:
	@rm -rf apache-annotator-$(annotator_vsn)-incubating
	@git clone \
        --config advice.detachedHead=false \
        --config versionsort.suffix=-rc \
        --depth 1 \
        --no-tags \
        --quiet \
        file://"$(shell git rev-parse --show-toplevel)" \
        apache-annotator-$(annotator_vsn)-incubating
	@git --git-dir apache-annotator-$(annotator_vsn)-incubating/.git config \
        remote.origin.url https://github.com/apache/incubator-annotator.git
	@tar czf \
        apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz \
        apache-annotator-$(annotator_vsn)-incubating
	@echo "Done: apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz"

endif

.PHONY: distcheck
distcheck: dist
	@tar xzf apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz
	@make -C apache-annotator-$(annotator_vsn)-incubating check

.PHONY: distsign
distsign: dist
	@gpg -ab apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz
	@sha256sum apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz \
        > apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz.sha256
	@sha512sum apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz \
        > apache-annotator-$(annotator_vsn)$(vsn_pre)-incubating.tar.gz.sha512
