summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 5a90166f7f9f6d9a7b8db1f4bc7cfa2479ddfeeb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
PYTHON=python
SITELIB=$(shell $(PYTHON) -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")

# Get the branch information from git
GIT_DATE := $(shell git log -n 1 --format="%ai")
DATE := $(shell date -u +%Y%m%d%H%M)

VERSION=$(shell $(PYTHON) -c "from awx import __version__; print(__version__.split('-')[0])")
RELEASE=$(shell $(PYTHON) -c "from awx import __version__; print(__version__.split('-')[1])")
ifneq ($(OFFICIAL),yes)
BUILD=-dev$(DATE)
SDIST_TAR_FILE=awx-$(VERSION)$(BUILD).tar.gz
DEB_BUILD_DIR=deb-build/awx-$(VERSION)$(BUILD)
DEB_PKG_RELEASE=$(VERSION)$(BUILD)
else
BUILD=
SDIST_TAR_FILE=awx-$(VERSION).tar.gz
DEB_BUILD_DIR=deb-build/awx-$(VERSION)
DEB_PKG_RELEASE=$(VERSION)-$(RELEASE)
endif

.PHONY: clean rebase push setup requirements requirements_pypi develop refresh \
	adduser syncdb migrate dbchange dbshell runserver celeryd test \
	test_coverage coverage_html dev_build release_build release_ball \
	release_clean sdist rpm

# Remove temporary build files, compiled Python files.
clean:
	rm -rf dist/*
	rm -rf build rpm-build *.egg-info
	rm -rf debian deb-build
	find . -type f -regex ".*\.py[co]$$" -delete

# Fetch from origin, rebase local commits on top of origin commits.
rebase:
	git pull --rebase origin master

# Push changes to origin.
push:
	git push origin master

# Use Ansible to setup AWX development environment.
setup:
	ansible-playbook app_setup/setup.yml --verbose -i "127.0.0.1," -c local -e working_dir=`pwd`

# Install third-party requirements needed for development environment (using
# locally downloaded packages).
requirements:
	(cd requirements && pip install --no-index -r dev_local.txt)

# Install third-party requirements needed for development environment
# (downloading from PyPI if necessary).
requirements_pypi:
	pip install -r requirements/dev.txt

# "Install" awx package in development mode.  Creates link to working
# copy in site-packages and installs awx-manage command.
develop:
	python setup.py develop

# Refresh development environment after pulling new code.
refresh: clean requirements develop migrate

# Create Django superuser.
adduser:
	python manage.py createsuperuser

# Create initial database tables (excluding migrations).
syncdb:
	python manage.py syncdb --noinput

# Create database tables and apply any new migrations.
# The first command fixes migrations following cleanup for the 1.2b1 release.
migrate: syncdb
	-(python manage.py migrate main 2>&1 | grep 0017_changes) && (python manage.py migrate main --delete-ghost-migrations --fake 0001_v12b1_initial || python manage.py migrate main --fake)
	python manage.py migrate --noinput

# Run after making changes to the models to create a new migration.
dbchange:
	python manage.py schemamigration main v12b2_changes --auto

# access database shell, asks for password
dbshell:
	sudo -u postgres psql -d awx

# Run the built-in development webserver (by default on http://localhost:8013).
runserver:
	python manage.py runserver

# Run to start the background celery worker for development.
celeryd:
	python manage.py celeryd -l DEBUG -B --autoreload

# Run all unit tests.
test:
	python manage.py test main

# Run all unit tests with coverage enabled.
test_coverage:
	coverage run manage.py test main

# Output test coverage as HTML (into htmlcov directory).
coverage_html:
	coverage html

# Build a pip-installable package into dist/ with a timestamped version number.
dev_build:
	python setup.py dev_build

# Build a pip-installable package into dist/ with the release version number.
release_build:
	python setup.py release_build

release_ball: clean sdist
	#make release_build
	(cd ../ansible-doc; make)
	-(rm -rf awx-$(VERSION)-$(RELEASE))
	mkdir -p awx-$(VERSION)-$(RELEASE)/dist
	cp -a dist/* awx-$(VERSION)-$(RELEASE)/dist
	mkdir -p awx-$(VERSION)-$(RELEASE)/setup
	cp -a setup/* awx-$(VERSION)-$(RELEASE)/setup
	mkdir -p awx-$(VERSION)-$(RELEASE)/docs
	cp -a ../ansible-doc/*.pdf awx-$(VERSION)-$(RELEASE)/docs
	tar -cvf awx-$(VERSION)-$(RELEASE)-all.tar awx-$(VERSION)-$(RELEASE)

release_clean:
	-(rm *.tar)
	-(rm -rf ($RELEASE))

sdist: clean
	if [ "$(OFFICIAL)" = "yes" ] ; then \
	   $(PYTHON) setup.py release_build; \
	else \
	   BUILD=$(BUILD) $(PYTHON) setup.py sdist_awx; \
	fi

compiled: sdist
	#(cd dist/ && tar zxf $(SDIST_TAR_FILE))

rpm: compiled
	@mkdir -p rpm-build
	@cp dist/*.gz rpm-build/
	@rpmbuild --define "_topdir %(pwd)/rpm-build" \
	--define "_builddir %{_topdir}" \
	--define "_rpmdir %{_topdir}" \
	--define "_srcrpmdir %{_topdir}" \
	--define "_specdir %{_topdir}" \
	--define '_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.%%{ARCH}.rpm' \
	--define "_sourcedir  %{_topdir}" \
	-ba packaging/rpm/awx.spec

deb: compiled
	@mkdir -p deb-build
	@cp dist/$(SDIST_TAR_FILE) deb-build/
	(cd deb-build && tar zxf $(SDIST_TAR_FILE))
	(cd $(DEB_BUILD_DIR) && dh_make --indep --yes -f ../awx-$(VERSION)$(BUILD).tar.gz -p awx-$(VERSION)$(BUILD))
	@rm -rf $(DEB_BUILD_DIR)/debian
	@cp -a packaging/debian $(DEB_BUILD_DIR)/
	@echo "awx_$(DEB_PKG_RELEASE).deb admin optional" > $(DEB_BUILD_DIR)/debian/realfiles
	(cd $(DEB_BUILD_DIR) && PKG_RELEASE=$(DEB_PKG_RELEASE) dpkg-buildpackage -nc -us -uc -b --changes-option="-fdebian/realfiles")

install:
	$(PYTHON) setup.py install egg_info -b ""