--- name: Test and Release on: push: branches: - '**' tags-ignore: - '**' jobs: lint: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Run ShellCheck uses: ludeeus/action-shellcheck@2.0.0 with: check_together: 'yes' test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup bats uses: bats-core/bats-action@2.0.0 with: bats-version: 1.11.0 - name: Test run: bats tests/*.bats test-api-mode: # requires github API, didn't want to mock it runs-on: ubuntu-latest env: github_token: ${{ github.token }} steps: - name: Checkout code # have to checkout to have the source code available uses: actions/checkout@v4 - name: Remove .git directory # remove the git directory to make the testing valid run: rm -rf .git/ - name: Test lookup version (with API) id: version-lookup env: use_api: 'true' run: ./version-lookup.sh - name: Check lookup result shell: bash run: '[[ -n "${{ steps.version-lookup.outputs.CURRENT_VERSION }}" ]]' - name: Test increment version (with API) id: version-increment run: ./version-increment.sh env: current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }} scheme: calver use_api: 'true' - name: Check increment result shell: bash run: '[[ "$(date +%Y.%-m)" == "$(echo "${{ steps.version-increment.outputs.VERSION }}" | cut -d "." -f 1-2)" ]]' test-action-yml: # integration testing needs: - lint - test - test-api-mode strategy: matrix: os: - macos-latest - ubuntu-latest - windows-latest fail-fast: true runs-on: ${{ matrix.os }} steps: - name: Checkout code # have to checkout to have the source code available uses: actions/checkout@v4 - name: Remove .git directory # remove the git directory to make the testing valid shell: bash run: rm -rf .git/ - name: Get next version via API uses: ./ id: version-via-api with: scheme: 'calver' use_api: true - name: Checkout code uses: actions/checkout@v4 - name: Get next version via Git uses: ./ id: version-via-git with: scheme: 'calver' use_api: false - name: Check results agree shell: bash run: | [[ "${{ steps.version-via-api.outputs.current-version }}" == "${{ steps.version-via-git.outputs.current-version }}" ]] [[ "${{ steps.version-via-api.outputs.major-version }}" == "${{ steps.version-via-git.outputs.major-version }}" ]] [[ "${{ steps.version-via-api.outputs.minor-version }}" == "${{ steps.version-via-git.outputs.minor-version }}" ]] [[ "${{ steps.version-via-api.outputs.patch-version }}" == "${{ steps.version-via-git.outputs.patch-version }}" ]] # Don't test the full version or pre-version, since the number of digits is likely to be different (9 via api vs. 7 via git) - name: Get next version via Git with tag-prefix uses: ./ id: version-prefix with: scheme: 'semver' use_api: false tag_prefix: 'foo/bar@' - name: Check that it starts from 0.0.1 (since prefix doesn't exist) shell: bash run: | [[ "${{ steps.version-prefix.outputs.current-version }}" == "0.0.0" ]] [[ "${{ steps.version-prefix.outputs.version }}" == "0.0.1" ]] [[ "${{ steps.version-prefix.outputs.prefixed-version }}" == "foo/bar@0.0.1" ]] release: needs: - test-action-yml runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Lookup version id: version-lookup run: ./version-lookup.sh - name: Increment version id: version-increment run: ./version-increment.sh env: current_version: ${{ steps.version-lookup.outputs.CURRENT_VERSION }} scheme: calver - name: Release version uses: softprops/action-gh-release@v1 if: ${{ github.ref_name == github.event.repository.default_branch }} with: draft: false prerelease: false tag_name: "${{ steps.version-increment.outputs.VERSION }}"