how to make custom post with “publish” default functionality not save in draft?

Use ‘wp_insert_post_data’ filter hook for that kind of problem

add_filter('wp_insert_post_data', 'filter_post_data', 99, 2);

function filter_post_data($postData, $postarr) {

    if ($postData['post_status'] == 'draft') {
        $postData['post_status'] = 'publish';
    }

    return $postData;
}