pub directory created if missing