ProHoster > Blog > Pulega > Li'o o seoli ma GitHub Actions (fausiaina o se paipa CI/CD mo se galuega Java)
Li'o o seoli ma GitHub Actions (fausiaina o se paipa CI/CD mo se galuega Java)
E masani ona ou fausia se paipa mo galuega faufale i Java. O nisi taimi e tatala punaoa, o nisi taimi e leai. Na ou filifili talu ai nei e taumafai e aveese nisi o aʻu faleoloa mai Travis-CI ma TeamCity i GitHub Actions, ma o le mea lea na sau mai ai.
O le a le mea o le a tatou otometi?
Muamua, matou te manaʻomia se poloketi o le a matou faʻaaogaina, seʻi o tatou faia se tamaʻi talosaga ile Spring boot / Java 11 / Maven. Mo faʻamoemoega o lenei tusiga, matou te le fiafia lava i le faʻaogaina o le talosaga; o mea tetele o loʻo siomia ai le talosaga e taua ia i matou, o lea o le a lava mo i matou se pule REST API faigofie.
E mafai ona e va'ai i puna'oa iinei: github.com/antkorwin/github-actions O laasaga uma o le fausiaina o se paipa o loʻo atagia i talosaga toso mo lenei poloketi.
JIRA ma fuafuaga
E taua le fa'apea e masani ona matou fa'aogaina le JIRA e fai ma su'esu'ega fa'amatalaga, se'i o tatou faia se isi laupapa mo lenei poloketi ma fa'aopoopo i ai mataupu muamua:
I se taimi mulimuli ane o le a tatou toe foʻi atu i mea manaia e mafai e JIRA ma GitHub ona ofoina faʻatasi.
Matou te otometi le faʻapotopotoga o le poloketi
O la matou suʻega suʻega e fausia e ala i le maven, o lea o le fausiaina e fai si faigofie, pau lava le mea matou te manaʻomia o le mvn clean package.
Ina ia faia lenei mea e faʻaaoga ai Github Actions, matou te manaʻomia le fatuina o se faila i totonu o le fale teu oloa e faʻamatala ai a matou galuega, e mafai ona faia i se faila yml masani, e le mafai ona ou fai atu ou te fiafia i le "yml programming", ae o le a se mea e mafai ona tatou faia - matou te faia i le .github/ directory workflow/ file build.yml lea o le a matou faʻamatalaina ai gaioiga pe a fausia le paranesi matai:
on - o se faʻamatalaga lea o le mea na tupu o le a faʻalauiloa ai a tatou tusitusiga.
luga: pull_request/push - fa'ailoa mai e mana'omia ona fa'alauiloa lenei fa'agasolo galuega i taimi uma e fai ai se tulei i le matai ma fa'atupu talosaga toso.
O lo'o i lalo le fa'amatalaga o galuega (galuega) ma laasaga o le faʻatinoga (laasaga) mo galuega taitasi.
taufetuli - o iinei e mafai ona tatou filifilia le OS sini, e ofo ai, e mafai foi ona e filifilia Mac OS, ae i luga o faleoloa tumaoti e taugata tele (faʻatusatusa i Linux).
faaaogaina fa'atagaina oe e toe fa'aaoga isi gaioiga, mo se fa'ata'ita'iga, fa'aaoga gaioiga/setup-java gaioiga matou te fa'apipi'iina le si'osi'omaga mo Java 11.
Faatasi ai ma le fesoasoani a i e mafai ona matou faʻamaonia le faʻamaufaʻailoga matou te faʻaalia ai le gaioiga, o le mea moni o finauga ia o le a tuʻuina atu i le gaioiga.
Pau lava le mea o loʻo totoe o le faʻatautaia lea o le poloketi faʻatasi ma Maven: run: mvn -B clean package fuʻa -B fai mai matou te manaʻomia se faiga e le fefaʻasoaaʻi ina ia faʻafuaseʻi ona le manaʻo le maven e fesili mai ia i matou i se mea
Matagofie! Ia, o taimi uma e te tuuto atu ai i le matai, e amata le fausiaina o le poloketi.
Otometi fa'ata'ita'iga su'ega
E lelei le faʻapotopotoga, ae o le mea moni, e mafai ona faʻapipiʻiina ma le saogalemu se poloketi, ae le o se galuega. O le mea lea, o le isi laasaga o le faʻautometi le suʻega. E le gata i lea, e faigofie tele le vaʻavaʻai i taunuʻuga o le pasia o suʻega pe a e faia se iloiloga PR - e te iloa mautinoa e pasi suʻega ma e leai se tasi na galo e faʻatautaia a latou lala aʻo leʻi faia se fusi.
O le a matou faʻataʻitaʻiina suʻega pe a fatuina se talosaga toso ma tuʻufaʻatasia i le matai, ma i le taimi lava e tasi o le a matou faʻaopoopoina le fatuina o se lipoti i luga o code-coverage.
Ina ia aofia ai suʻega, ou te faʻaogaina codecov faʻatasi ma le jacoco plugin. codecov ei ai lana lava gaioiga, ae e manaʻomia se faʻailoga e galue ai ma le matou toso talosaga:
${{ secrets.CODECOV_TOKEN }} - o le a matou vaʻai i lenei fausiaina e sili atu ma le tasi, o mea lilo o se masini mo le teuina o mealilo i GitHub, e mafai ona matou tusia iina upu faʻamaonia / faʻailoga / talimalo / urls ma isi faʻamatalaga e le tatau ona aofia i totonu o le faʻamaumauga faʻamaumauga.
E mafai ona e faʻaopoopoina se fesuiaiga i mealilo i totonu o le fale teu oloa ile GitHub:
E mafai ona e maua se faailoga i codecov.io A maeʻa le faʻatagaina e ala i GitHub, e faʻaopoopo se galuega lautele e te manaʻomia e mulimuli i se fesoʻotaʻiga pei o lenei: GitHub igoa fa'aoga/[suiga igoa]. E mafai foʻi ona faʻaopoopoina se fale teu oloa; ina ia faia lenei mea, e tatau ona e tuʻuina atu aia tatau codecov i le talosaga i Github.
O lea o le a ulufale le codecov bot a matou talosaga toso taʻitasi ma faʻaopoopo se kalafi suiga suiga:
Se'i o tatou fa'aopoopoina se su'esu'ega fa'amau
I le tele o aʻu galuega faʻavae tatala, ou te faʻaogaina le sonar cloud mo le suʻesuʻeina o code code, e faigofie lava ona faʻafesoʻotaʻi i travis-ci. O lea la o se laasaga talafeagai pe a faimalaga i GitHub Actions e fai tutusa. O le maketi gaioiga o se mea manaia, ae o le taimi lea na ou faʻavaivaia ai, ona o le masani na ou maua ai le gaioiga na ou manaʻomia ma faʻaopoopo i le galuega. Ae na foliga mai e le lagolagoina e sonar le galue i se gaioiga mo le suʻeina o galuega faatino i luga o le maven poʻo le gradle. Ioe, o loʻo tusia lenei mea i totonu o faʻamaumauga, ae o ai na te faitauina?!
E le mafai e ala i se gaioiga, o lea o le a matou faia e ala i le mvn plugin:
SONAR_TOKEN - e mafai ona maua i sonarcloud.io ma e tatau ona e lesitala i mea lilo. GITHUB_TOKEN - o se faʻailoga faʻapipiʻi lea e gaosia e GitHub, faʻatasi ai ma le fesoasoani o le sonarcloud[bot] o le a mafai ona saini i Git ina ia tuʻu mai ia i matou savali i talosaga toso.
Dsonar.projectKey - le igoa o le poloketi i le sonar, e mafai ona e vaʻai i ai i le faʻatulagaina o galuega.
Dsonar.organization - igoa o le faʻalapotopotoga mai GitHub.
Matou te faia se talosaga toso ma faʻatali mo sonarcloud[bot] e sau i faʻamatalaga:
Faʻamatuʻu pulega
Ua uma ona faʻatulagaina le fausiaina, ua uma suʻega, ma e mafai ona matou faia se faʻamalolo. Se'i o tatou va'ai pe fa'afefea ona fa'afaigofie e le GitHub Actions le pulega fa'asa'oloto.
I le galuega, o loʻo i ai aʻu galuega faʻavae o loʻo i totonu o le bitbucket (o mea uma lava e pei o lena tala "Ou te tusi i le bitbucket i le ao, tautino i GitHub i le po"). Ae paga lea, o le bitbucket e leai ni mea faigaluega e fa'asa'oloto ai. O se faʻafitauli lea, aua mo faʻasalalauga taʻitasi e tatau ona e faia ma le lima se itulau i le faʻafeiloaʻiga ma lafo uma foliga o loʻo aofia ai i le faʻamalolo iina, suʻesuʻe i totonu o maota o le mafaufau, galuega i jira, faia i le fale teu oloa. E tele avanoa e fai ai se mea sese, e mafai ona galo ia te oe se mea pe ulufale i se mea ua uma ona tatalaina i le taimi mulimuli, o nisi taimi e le o manino pe o le a le faʻavasegaina o se talosaga toso e pei o - o se faʻaaliga poʻo se faʻapipiʻi bug, poʻo suʻega suʻega, poʻo se mea fa'apitoa .
E mafai faapefea e GitHub gaioiga ona fesoasoani ia i tatou? O loʻo i ai se gaioiga sili - faʻasaʻo faʻataʻitaʻiga, e mafai ai ona e setiina se faʻataʻitaʻiga faila faila faʻamaumauga e faʻatulaga ai vaega o talosaga toso ma faʻapipiʻi otometi i latou i le faila faʻamatalaga faʻamaumauga:
Fa'ata'ita'iga fa'ata'ita'iga mo le fa'atulagaina o se lipoti (.github/release-drafter.yml):
name-template: 'v$NEXT_PATCH_VERSION'
tag-template: 'v$NEXT_PATCH_VERSION'
categories:
- title: ' New Features'
labels:
- 'type:features'
# в эту категорию собираем все PR с меткой type:features
- title: ' Bugs Fixes'
labels:
- 'type:fix'
# аналогично для метки type:fix и т.д.
- title: ' Documentation'
labels:
- 'type:documentation'
- title: ' Configuration'
labels:
- 'type:config'
change-template: '- $TITLE @$AUTHOR (#$NUMBER)'
template: |
## Changes
$CHANGES
Fa'aopoopo se fa'amatalaga e fa'atupu ai se fa'ata'ita'iga fa'amatu'u (.github/workflows/release-draft.yml):
O talosaga toso uma mai le taimi nei o le a aoina otometi i faʻamaumauga faʻasaʻo - faʻataulāitu!
O iinei e ono tulaʻi mai ai le fesili: faʻafefea pe a galo i le au atinaʻe le tuʻuina o pine i le PR? Ona le manino lea po o le fea vaega e tu'u i ai, ma e tatau ona e taulimaina ma le lima, ma PR ta'itasi eseese. Ina ia foia lenei faʻafitauli, e mafai ona matou faʻaogaina se isi gaioiga - faʻamaonia igoa - e siaki ai le iai o faʻailoga i luga o le talosaga toso. Afai e leai ni faʻailoga manaʻomia, o le a le manuia le siaki ma o le a matou vaʻai i se feʻau e uiga i lenei mea i la matou talosaga toso.
Ole taimi nei e tatau ona makaina soʻo se toso-talosaga i se tasi o pine: ituaiga:fix, type:features, type:documentation, type:tests, type:config.
Auto-faamatalaga o talosaga toso
Talu ai na matou paʻi atu i se autu e pei o se galuega aoga ma talosaga toso, e aoga le talanoa e uiga i se gaioiga e pei o le faʻailoga, e tuʻu ai pine i le PR e faʻavae i luga o faila ua suia. Mo se faʻataʻitaʻiga, e mafai ona tatou faʻailogaina o le [fausia] soʻo se talosaga toso e iai suiga i le lisi .github/workflow.
Ou te leʻi manuia i le faʻapipiʻiina o le gaioiga e otometi ona tuʻu igoa i talosaga toso ma le gaioiga e siaki ai le i ai o faʻailoga manaʻomia; e le manaʻo le faʻailoga-igoa e vaʻai i igoa faʻaopoopo e le bot. E foliga mai e faigofie ona tusi lau oe lava gaioiga e tuʻufaʻatasia ai vaega uma e lua. Ae e oʻo lava i lenei fomu e faigofie tele ona faʻaoga; e tatau ona e filifilia se igoa mai le lisi pe a fatuina se talosaga toso.
Ua oʻo i le taimi e faʻapipiʻi ai
Sa ou taumafai i le tele o filifiliga e ala i le GitHub Actions (e ala i le ssh, e ala i le scp, ma le faʻaogaina o le docker-hub), ma e mafai ona ou fai atu, e foliga mai, o le ae mauaina se auala e faʻapipiʻi ai le binary i le server, e tusa lava po o le a le piʻopiʻo o lau paipa. o.
Ou te fiafia i le filifiliga o le teuina uma o atinaʻe i se nofoaga e tasi, o lea seʻi o tatou vaʻavaʻai pe faʻafefea ona faʻapipiʻi i GitHub Packages (o se fale teu oloa mo mea e lua, npm, fagu, docker).
Faʻamatalaga mo le fausiaina o se ata faʻapipiʻi ma lolomiina i GitHub Packages:
Muamua, matou te manaʻomia le fausiaina o le faila JAR o la matou talosaga, a maeʻa ona matou faʻatatauina le ala i le GitHub docker resitala ma le igoa o la matou ata. E i ai nai togafiti iinei tatou te leʻi mauaina i le taimi nei:
o se fausaga e pei o: echo “::set-output name=NAME::VALUE” e mafai ai ona e setiina le tau o se fesuiaiga i le laasaga o loo i ai nei, ina ia mafai ona faitau i isi laasaga uma.
e mafai ona e maua le tau o le seti fesuiaiga i le laasaga muamua e ala i le faailoaina o lenei laasaga: ${{ steps.global_env.outputs.DOCKERHUB_IMAGE_NAME }}
O le tulaga GITHUB_REPOSITORY fesuiaiga e teu ai le igoa o le fale teu oloa ma lona pule ("owner/repo-name"). Ina ia tipi mea uma mai lenei laina sei vagana ai le igoa o le fale teu oloa, o le a matou faʻaogaina le syntax bash: ${GITHUB_REPOSITORY#*/}
O le isi mea e manaʻomia ona tatou fausia le ata o le docker:
Ina ia faʻaalia le faʻaaliga o le ata, matou te faʻaogaina numera muamua mai le SHA hash of the commit - GITHUB_SHA o loʻo i ai foʻi nuances iinei, pe a fai e te faia na mea e le gata pe a tuʻufaʻatasia i le matai, ae faʻapea foʻi ma le tosoina o le talosaga. mea na tupu, ona le mafai lea e le SHA ona fetaui ma le hash lea tatou te vaʻaia i le git history, aua o gaioiga / siaki gaioiga e faia ai lana lava hash tulaga ese e aloese ai mai gaioiga faʻalavelave i le PR.
Afai e lelei mea uma, ona tatalaina lea o le vaega o afifi (https://github.com/antkorwin/github-actions/packages) i totonu o le fale teu oloa, o le a e vaʻai i se ata fou o le docker:
O iina e mafai ai foi ona e vaʻai i se lisi o faʻaaliga o le ata o le docker.
Pau lava le mea o loʻo totoe o le faʻatulagaina o la matou 'auʻaunaga e galulue ma lenei resitala ma toe amata le auaunaga. Atonu o le a ou talanoa pe faʻafefea ona fai lenei mea e ala i le systemd i se isi taimi.
Mataitu
Sei o tatou tilotilo i se filifiliga faigofie ile auala e fai ai se siaki soifua maloloina mo la tatou talosaga e faʻaaoga ai GitHub Actions. O loʻo i ai i le matou taʻaloga taʻavale se gaioiga, o lea matou te le manaʻomia ai ona tusia se API e siaki ai lona tulaga; ua uma ona matou faia mea uma mo le paie. E na'o lou mana'omia e toso le talimalo: SERVER-URL:PORT/actuator/health
Pau lava le mea matou te manaʻomia o le tusia lea o se galuega e siaki ai le server e faʻaaoga ai le cron, ma afai faʻafuaseʻi na te le tali mai ia i matou, ona matou lafoina lea o se faʻamatalaga i le telegram.
Muamua, seʻi o tatou vaʻai pe faʻafefea ona faʻatautaia se faʻasologa o galuega cron:
Sei o tatou siaki le tulaga o le server ma le lima e ala i le curl:
jobs:
ping:
runs-on: ubuntu-18.04
steps:
- name: curl actuator
id: ping
run: |
echo "::set-output name=status::$(curl ${{secrets.SERVER_HOST}}/api/actuator/health)"
- name: health check
run: |
if [[ ${{ steps.ping.outputs.status }} != *"UP"* ]]; then
echo "health check is failed"
exit 1
fi
echo "It's OK"
Muamua, matou te faʻasaoina i totonu o se fesuiaiga le mea na tali mai ai le server i le talosaga, i le isi laasaga matou te siakiina o le tulaga o le UP ma, afai e le o le tulaga lea, ona matou o ese lea ma se mea sese. Afai e te manaʻomia e "lofāina" se gaioiga i ou lima, ona ulufafo 1 - auupega talafeagai.
- name: send alert in telegram
if: ${{ failure() }}
uses: appleboy/telegram-action@master
with:
to: ${{ secrets.TELEGRAM_TO }}
token: ${{ secrets.TELEGRAM_TOKEN }}
message: |
Health check of the:
${{secrets.SERVER_HOST}}/api/actuator/health
failed with the result:
${{ steps.ping.outputs.status }}
Matou te lafo i le telegram pe a le manuia le gaioiga i le laasaga muamua. E lafo se fe'au matou te fa'aoga appleboy/telegram-action; e mafai ona e faitau pe fa'apefea ona maua se fa'ailoga bot ma talatalanoa id i totonu o fa'amaumauga: github.com/appleboy/telegram-action
Aua nei galo e tusi i mea lilo ile Github: URL mo le server ma faʻailoga mo le telegram bot.
Ala ponesi - JIRA mo le paie
Sa ou folafola atu o le a ma toe foi i le JIRA, ma ua ma toe foi mai. E fiaselau taimi na ou matauina ai se tulaga i tulaga i luga ole taimi na faia ai e le au atinaʻe se faʻaaliga, tuʻufaʻatasia se lala, ae galo e toso le mataupu ile JIRA. Ioe, afai e faia uma nei mea i se nofoaga e tasi, o le a sili atu ona faigofie, ae o le mea moni matou te tusia le code i le IDE, tuʻufaʻatasia lala i bitbucket poʻo GitHub, ona toso lea o galuega i Jira, mo lenei mea tatou te manaʻomia le tatalaina o faamalama fou. , o nisi taimi e toe ulufale i totonu ma isi. A e manatua lelei le mea e tatau ona e faia i le isi mea, ona leai lea o se mea e toe tatalaina ai le laupapa. O se taunuuga, i le taeao i se tulaga e te manaʻomia e faʻaalu se taimi e faʻafouina ai le laupapa galuega.
GitHub o le a fesoasoani foi ia i matou i lenei galuega masani; mo le amataga, e mafai ona matou toso otometi mataupu i le code_review koluma pe a matou tuʻuina atu se talosaga toso. Pau lava le mea e tatau ona e faia o le mulimuli lea i le tauaofiaga o igoa o le lālā:
[имя проекта]-[номер таска]-название
mo se faʻataʻitaʻiga, afai o le ki o le poloketi "GitHub Actions" o GA, ona GA-8-jira-bot e mafai ona avea ma lala mo le faʻatinoina o le GA-8 galuega.
Faʻatasi ma le JIRA e galue e ala i gaioiga mai Atlassian, latou te le atoatoa, e tatau ona ou fai atu o nisi oi latou e leʻi aoga mo aʻu. Ae o le a tatou talanoaina naʻo mea e mautinoa e aoga ma faʻaaogaina malosi.
Muamua e tatau ona e ulufale i le JIRA e faʻaaoga ai le gaioiga: atlassian/gajira-login
Matou te aveese le faʻamatalaga o galuega mai le igoa o le lala:
- name: Find Issue
id: find_issue
shell: bash
run: |
echo "::set-output name=ISSUE_ID::$(echo ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}')"
echo brach name: $GITHUB_HEAD_REF
echo extracted issue: ${GITHUB_HEAD_REF} | egrep -o 'GA-[0-9]{1,4}'
- name: Check Issue
shell: bash
run: |
if [[ "${{steps.find_issue.outputs.ISSUE_ID}}" == "" ]]; then
echo "Please name your branch according to the JIRA issue: [project_key]-[task_number]-branch_name"
exit 1
fi
echo succcessfully found JIRA issue: ${{steps.find_issue.outputs.ISSUE_ID}}
Afai e te suʻeina i le maketi GitHub, e mafai ona e mauaina se gaioiga mo lenei galuega, ae e tatau ona ou tusia le mea lava e tasi e faʻaaoga ai le grep e faʻaaoga ai le igoa o le lala, aua o lenei gaioiga mai Atlassian e leʻi manaʻo e galue i laʻu galuega i soʻo se auala , ia iloa po o le a le mea na sese iina - umi atu nai lo le faia o le mea lava e tasi i ou lima.
Pau lava le mea o loʻo totoe o le faʻanofoina lea o le galuega i le koluma "Code review" pe a fatuina se talosaga toso:
O loʻo i ai se gaioiga faʻapitoa mo lenei mea ile GitHub, pau lava le mea e manaʻomia o le ID ID na maua i le laasaga muamua ma le faʻatagaina i le JIRA na matou faia i luga.
I le auala lava e tasi, e mafai ona e tosoina galuega pe a tuʻufaʻatasia i totonu o le matai, ma isi mea na tutupu mai GitHub workflow. I se tulaga lautele, e faʻalagolago uma i ou mafaufauga ma le manaʻo e faʻautometi faiga masani.
sailiiliga
Afai e te vaʻavaʻai i le ata mataʻina o le DEVOPS, ua uma ona matou ufiufi vaega uma, sei vagana ua faʻagaioi, ou te manatu afai e te taumafai, e mafai ona e mauaina se gaioiga i le maketi mo le tuʻufaʻatasia ma le fesoasoani-desk system, o lea o le a tatou manatu ai ua liliu le paipa. ia mae'ae'a ma e mafai ona faia fa'ai'uga e fa'atatau i lona fa'aoga.
Pros:
Maketi fa'atasi ai ma gaioiga ua saunia mo taimi uma, e manaia tele lenei mea. I le tele o latou, e mafai foʻi ona e vaʻavaʻai i le code source e malamalama ai pe faʻafefea ona foia se faʻafitauli tutusa poʻo le lafoina o se talosaga faʻapitoa i le tusitala saʻo i le GitHub repository.
Filifilia o le faʻatulagaina faʻatulagaina mo le faʻapotopotoga: Linux, mac os, windows o se mea manaia tele.
Github Packages o se mea sili, e faigofie le teuina uma o atinaʻe i se nofoaga e tasi, e te le tau faaseʻe i faʻamalama eseese, o mea uma o loʻo i totonu o le laina o le tasi pe lua kiliki kisi ma faʻapipiʻi atoatoa ma GitHub Actions. O le lagolago resitala a Docker i le free version o se avanoa lelei foi.
GitHub natia mealilo i le fausiaina o ogalaau, o lea o le faʻaaogaina e teu ai faʻaupuga ma faʻailoga e le faʻafefe. I aʻu suʻesuʻega uma, sa le mafai lava ona ou vaʻaia le mealilo i lona foliga mama i totonu o le faʻamafanafanaga.
E leai se totogi mo poloketi Open Source
Cons:
YML, lelei, ou te le fiafia ia te ia. Pe a galue i sea tafega, o le savali masani masani o loʻo ia te aʻu o le "fix yml format", o nisi taimi e galo ia te oe e tuʻu se laupepa i se mea, o nisi taimi e te tusia i luga o le laina sese. I se tulaga lautele, o le nofo i luma o le lau ma se protractor ma se pule e le o se aafiaga sili ona manaia.
DEBUG, faʻapipiʻiina o le tafe ma taʻutinoga, toe faʻaleleia, ma faʻapipiʻiina i le faʻamafanafanaga e le faigofie i taimi uma, ae sili atu i le vaega "ua e sili atu"; ua e masani e galue ma le IDEA talafeagai, pe a mafai ona e faʻapipiʻi soʻo se mea. .
E mafai ona e tusia lau gaioiga i luga o soʻo se mea pe afai e te afifiina i Docker, ae naʻo le javascript e lagolagoina, ioe o se mea o le tofo, ae ou te manaʻo i se isi mea nai lo le js.
O le vaiaso a sau o le a ma faafiafia ai lipoti i le Heisenbug 2020 Piter conference. O le a ou taʻu atu ia te oe e le gata i le auala e aloese ai mai mea sese pe a saunia faʻamaumauga o suʻega, ae faʻasoa foi aʻu mealilo o le galue ma seti faʻamaumauga i Java applications!