반응형


github의 action 을 사용할때 , 환경변수등을 설정할 필요가 있습니다.

이때 활용 할 수 있는 것이 이와 같습니다.

특히 android release 빌드를 할때는 keystore 가 반드시 필요한데, 이 keystore는 외부에 노출하면 안되는 것이라 참 난감합니다.

그런데 이를 지원해줄 수 있는 github의 secret variable 저장 기능이 있습니다.

이를 한번 알아봅시다.!

 

 

유사한 내용이지만 둘다 모두 필요한 내용이 있어서 정리를 위해 링크 남깁니다.

 


https://medium.com/@dcostalloyd90/automating-android-builds-with-github-actions-a-step-by-step-guide-2a02a54f59cd

 

 

Automating Android Builds with GitHub Actions: A Step-by-Step Guide

In this tutorial, we’ll walk you through the process of automating Android builds using GitHub Actions. This will streamline your…

medium.com

 

 

https://www.droidcon.com/2023/09/08/build-sign-and-create-release-build-using-github-actions/

 

 

위 내용들이 mac에서 셋업을 하면서 보니까. 약간 차이점들이 있었습니다. 그리고 오류도 좀 있고요.

저도 순서를 하나씩 짚어보면서 정리해보도록 하겠습니다.

 

1. github 에서 action 과 과련한 secret  파일들을 설정할 수 있는 부분이 있습니다.

github/[내프로젝트]/settings 에서 Secrets and variables 메뉴가 있습니다.

 

 

 

 

Secrets에 secret들을 하나씩 추가해봅시다.

 

 

KEYSTORE_BASE_64

RELEASE_KEYSTORE_ALIAS

RELEASE_KEYSTORE_PASSWORD

RELEASE_KEY_PASSWORD

 

이렇게 4가지를 차례대로 만들 예정입니다.

이미 키가 있다는 전제하에 설명합니다.(키 만드는 것은 여기서 확인!)

 

KEYSTORE_BASE_64 

사용하고 있는 key file이 있으실텐데 해당 key file을 사용하시면 됩니다.

저는 여기서 key.jks 라는 이름의 파일 이라고 가정하고 진행합니다.

base64 인코딩 하기

github의 secret 에는 파일을 추가 할 수 없습니다. 따라서 text를 이용해야 합니다. 때문에 key 파일을 문자열로 변환하기 위해 base64 인코딩합니다.

 

형식 : base64 -i <in-file> -o <outfile>

 

$ base64 -i key.jks -o keystore-b64.txt

 

이렇게 keystore-b64.txt를 열어서 해당 text를 KEYSTORE_BASE_64 에 저장합니다.

 

나머지  RELEASE_KEYSTORE_ALIAS / RELEASE_KEYSTORE_PASSWORD / RELEASE_KEY_PASSWORD

들은 키를 만들때 사용했던 alias, keystore passowrd, key passoword 를 적어주면 됩니다.

 

 

 

2. build.gradle 을 수정합니다.

이제 gradle 파일을 수정하러 가야 합니다.

android/app/build.gradle 

    signingConfigs{
        releaseWithSignedKey {
            
            storeFile file("../keystore.jks")
            storePassword System.getenv("RELEASE_KEYSTORE_PASSWORD")
            keyAlias System.getenv("RELEASE_KEYSTORE_ALIAS")
            keyPassword System.getenv("RELEASE_KEY_PASSWORD")
        }
    }
    
    :
    
    buildTypes {
        release {

            signingConfig = signingConfigs.releaseWithSignedKey
            System.out.println("signingConfig:$signingConfig")
        }
    }

 

signingConfigs 를 추가하고 buildType의 release에서 이 정보를 이용하도록 설정합니다.

 

자! 코드를 보셔서 아시겠지만, 로컬에서 release로 빌드를 하려면 어떻게 해야 할까요?

환경변수에 RELEASE_KEYSTORE_ALIAS,RELEASE_KEYSTORE_PASSWORD,RELEASE_KEY_PASSWORD 를 설정 해야 겠죠.

이건 쉬우니까 구글링 해서 찾어보시면 됩니다.

 

 

3. github action 의 workflow 수정 하기.

github action에서 핵심은 base64로 encoding 된 key를 다시 keystore.jks로 변환하여 사용하는 것과 환경 변수 세팅입니다.

 

    steps:
     - name: Checking out branch
       uses: actions/checkout@v3
     - name: Setup Java
       uses: actions/setup-java@v3
       with:
         distribution: 'zulu' # See 'Supported distributions' for available options
         java-version: '17'
         cache: 'gradle'
     - name: Decode Keystore
       env:
          ENCODED_STRING: ${{ secrets.KEYSTORE_BASE_64 }}
          RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
          RELEASE_KEYSTORE_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
          RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} 

       run: |
          echo $ENCODED_STRING > keystore-b64.txt
          base64 -d -o keystore.jks < keystore-b64.txt
          
     - name: Setup flutter
       uses: subosito/flutter-action@v2
       with:
         flutter-version: '3.24.1'
     - run: flutter pub get

     - run: flutter build apk --debug

 

 

위와 같이 Decode Keystore를  actions/setup-java 다음에 추가해줍니다.

바로 아래 항목입니다.

     - name: Decode Keystore
       env:
          ENCODED_STRING: ${{ secrets.KEYSTORE_BASE_64 }}
          RELEASE_KEYSTORE_PASSWORD: ${{ secrets.RELEASE_KEYSTORE_PASSWORD }}
          RELEASE_KEYSTORE_ALIAS: ${{ secrets.RELEASE_KEYSTORE_ALIAS }}
          RELEASE_KEY_PASSWORD: ${{ secrets.RELEASE_KEY_PASSWORD }} 

       run: |
          echo $ENCODED_STRING > keystore-b64.txt
          base64 -d -o keystore.jks < keystore-b64.txt

 

여기까지 해주면 action 에서 release build 테스트를 위한 환경이 끝났습니다.

 

깃 커밋하시면 자동으로 릴리즈 빌드를 시험해보실 수 있습니다.

 

#해피코딩

반응형

 

안녕하세요.

 

git을 사용하다보면, .gitignore 를 이용하여 파일을 무시하도록 하는 경우가 많은데요.

간혹 git에는 파일을 올려 놓아야하는데, 내용은 로컬에서 변경해서 사용해야 하는 경우들이 있습니다.

 

대표적으로, .env 같은 파일이죠.

 

보통은 .env는 .gitignore에 추가해서 git에는 파일 자체를 올려놓지 않습니다.

 

그러나 flutter의 dotenv 같은 package를 사용한다거나 하는 경우,

.env를 asset으로 올려놓고 사용해야 합니다. 물론 보안상 문제가 있습니다.

그래서 .env를 사용하지 말아야 하나 어쩔수 없는 경우들이 있겠죠?

 

이걸 논하고자 하는것이 아니라 넘어가도록 하고요.

이런경우, git에 더미파일로 .env파일을 만들어서 올려놔야 git action같은 자동화 빌드를 할때 에러 없이 무사히 통화 하게 됩니다.

 

.env 파일에 아래와 같이 더미로 내용을 채워서 올려놓게 되죠.


SUPABASE_URL = "my url"
SUPABASE_ANON = " my key"

 

하지만 이미 git에 파일이 올라가 있기 때문에, 로컬에서 수정하게되면 항상 changed로 표시가 되게 됩니다.

만약 실수해서 commit을 하게 되면, 실제로 사용하는 url과 key가 git에 노출되어버리게 되죠.

 

git update-index --skip-worktree

이럴때 사용할 수 있는 것이 git update-index --skip-worktree 입니다.

$ git update-index --skip-worktree <file path>
즉,
$ git update-index --skip-worktree .env

 

이렇게 해놓으면 git에서 해당 파일에 대한 수정 사항을 추적하지 않습니다.

이를 되돌리려면 --no-skip-worktree 옵션을 사용하면 됩니다.

 

 

 

그럼

해피코딩!!!

반응형

 

git reviewer 추가

 

.git/config 내에  아래와 같이 추가하면, review에게 자동으로 메일이 갑니다.

receivepack = git receive-pack \
--reviewer id@aaa.xxx.com\
--reviewer aaa@org.xxx.com\

--reviewer aaa@org.xxx.com\

반응형

Github를 사용하다보면 콘솔에서 git을 사용해야 하는 경우들이 있습니다.

간단하지만 유용한 팁입니다.

 

 

git commit 

 

 

github 를 사용하는 경우 patch set 을 추가하는 방법은 아래와 같습니다.

 

이미 commit을 하나 올렸는데 해당 commit에 수정사항을 추가하고 싶은 경우 아래와 같이 사용하면 됩니다.

 

git add "추가 수정한 파일들"

 

git commit --amend   --> 이전 commit 에 추가

 

git push origin +branch 명

 

"+" 를 이용하여 해당 branch에 push를 하면, 이전 commit에 append됩니다.

 

 

 

 

git log 

git log 를 통해서 어떤 commit 들이 추가되었는지 히스토리를 파악할 수 있습니다.

그런데 가끔은 로그를  메일등에 commit들을 첨부해서 보내야 하는 경우나 한눈에 짧게 보고 싶은 경우들이 발생하죠.

 

이럴때 쓸 수 있는 간단한 팁입니다.

 

git log --oneline : 이렇게 하면 1줄 단위로 listup 되어 보입니다.

 

 

음 그런데 막상 이렇게 해서 보니까. 줄도 안맞고 hash키도 잘 안보이고 합니다.

포멧을 내가 정하면 좋겠다.. 는 생각이 막 들죠???

 

이럴때 --format을 사용합니다.

 

git log -5 --date=short --format="%H %ad %<(20)%an %<(80,trunc)%s"

 

git log --help 를 보시면,

%H  : hash key입니다.'

%ad : 작성 날짜   : --date 로 설정한 값으로 표시 됩니다.

%an : 작성자 이름

%s : commint message 입니다.

 

여기에 format을 맞추기 위해서  %<(20) 은 뒤에 %an 공간을 20자 버퍼를 두겠다는 의미입니다. (줄맞춤 용도이죠)

%<(80,trunc) 은 %s 의 공간은 80자 공간이고, 넘으면 글자를 자르겠다는 의미입니다.

 

 

이외에도 다양한 방식으로 출력 형태를 사용할 수 있겠죠.?

 

 

 

git log -5 --format="%H %ad %an %s"

 

 

git log --format="<tr>\

<th>%H</th>\

<th>%ad</th>\

<th>%an</th>\

<th>%s %>|(30)</th>\

</tr>"

 

 

 

반응형



#! /bin/bash
# usage : backup.sh "NewFolder"
mkdir /media/newDisk1/3.0.backup/backup
git status | grep ': ' | awk -F ': *' '{print "echo ""backup:" $2 "\ncp " $2 " /media/newDisk1/3.0.backup/backup" }'>tmp.sh
chmod +x tmp.sh
bash tmp.sh
mv "/media/newDisk1/backup/backup" "/media/newDisk1/3.0.backup/$1"
rm tmp.sh
echo "backup finished : /media/newDisk1/3.0.backup/"$1





git status 로 나오는 결과중에서 modified 된 파일들만 폴더로 저장하는 스크립트


git folder에서

backup.sh  저장폴더명

을 작성하시면 해당 폴더가 생성되고 거기에 수정중이던 파일들이 copy 됩니다.

+ Recent posts